2012-03-03 3 views
18

Я использую TableSorter плагин JQuery и у меня есть столбец, который содержит название месяца и года, как этотJQuery плагин TableSorter вторичный «скрытый» сортировки

April, 1975 
January, 2001 

Я хотел бы разобраться в этом столбце, как если бы были столбцом даты. Насколько я понимаю, можно отсортировать столбец с некоторым другим «скрытым» значением, но я просто не могу найти документацию для этой функции. Любая помощь там?

Update

Эта вилка http://mottie.github.com/tablesorter/docs/index.html из TableSorter только то, что мне нужно; способность хранить значение для сортировки по атрибуту, отлично работала.

ответ

20

У меня есть вилка tablesorter, которая позволяет вам написать парсер, который может extract data attributes из ячейки таблицы, а также назначить конкретный textExtraction for each column.

$(function(){ 

    $.tablesorter.addParser({ 
    // set a unique id 
    id: 'myParser', 
    is: function(s) { 
     // return false so this parser is not auto detected 
     return false; 
    }, 
    format: function(s, table, cell, cellIndex) { 
     // get data attributes from $(cell).attr('data-something'); 
     // check specific column using cellIndex 
     return $(cell).attr('data-something'); 
    }, 
    // set type, either numeric or text 
    type: 'text' 
    }); 

    $('table').tablesorter({ 
    headers : { 
     0 : { sorter: 'myParser' } 
    } 
    }); 

}); 
+9

В последней версии (2.16+) вы можете добавить 'data-text' в любую ячейку tbody, чтобы использовать ее значение для сортировка. Этот атрибут данных можно установить с помощью опции ['textAttribute'] (http://mottie.github.io/tablesorter/docs/#textattribute). – Mottie

2

Необходимо, чтобы write your own parser. Ваш парсер может выглядеть примерно так:

var months = {'January':1,'February':2, ...}; 
$.tablesorter.addParser({ 
    id: 'myDate', 
    is: function(s) { return false; }, 
    format: function(s) { 
     var x = s.split(', '); 
     return x[1]+'-'+months[x[2]]; 
    }, 
    type: 'numeric' 
}); 

Не проверено, но общая идея.

+0

Спасибо, что ответили! Таким образом, я не могу поместить значение даты в некоторый атрибут в ячейке, как этот « Январь 2010 года 'и сделать сортировщик таблиц таким? Или можно использовать функцию textExtraction только для одного столбца? Написание парсера немного проблематично, так как месяцы могут быть на других языках. Возможно ли другие плагины, поддерживающие поведение, которое я ищу? – Pelle

+2

@Pelle У меня есть вилка [tablesorter] (http://mottie.github.com/tablesorter/docs/index.html) на github, которая позволит вам написать парсер, который может извлекать атрибуты данных (http: //mottie.github.com/tablesorter/docs/example-parsers-advanced.html) из ячейки таблицы, а также назначить определенную функцию [textExtraction для каждого столбца] (http://mottie.github.com/tablesorter/ Docs/пример-опционный текст extraction.html). – Mottie

+0

@fudgey Фантастический! только то, что я искал, отлично поработал, ура! – Pelle

32

Просто используя функцию textExtraction. Задайте значение сортировки данных для ваших TD. По умолчанию используется обычный текст, если его нет.

$(".sort-table").tablesorter({ 
    textExtraction: function(node) { 
     var attr = $(node).attr('data-sort-value'); 
     if (typeof attr !== 'undefined' && attr !== false) { 
      return attr; 
     } 
     return $(node).text(); 
    } 
}); 
+0

Этот «крошечный» работает отлично с jquery-1.9.1. Спасибо – netic

+1

Я бы сделал проверку атрибута данных, встроенную в функцию textExtraction, но я обнаружил, что это действительно замедлило процесс построения кеша в более старых версиях IE. – Mottie

+0

Работает просто отлично –

3

Это немного рубить (КИ, это общая хак), но если вы установите анализатор для столбца «текст», и предварительно исправить довольно выход с строкой, которую вы действительно хотите сортировать по скрытому диапазону, он будет сортироваться правильно.

Вы можете установить синтаксический анализатор в столбце с опцией headers, например. установить анализатор на первые и вторые столбцах «текст», вы бы установить следующее:

headers: {0: {sorter: 'text'}, : {sorter: 'text'} 

Чтобы сделать этот трюк с датами, вы можете использовать ISO8601 формат дату рассортировывающий лексический. Объекты JS Date могут генерировать строки даты ISO8601 через функцию toISOString().

Учитывая CSS:

span.hidden{ 
    display:none; 
} 

Образец ячейки таблицы будет выглядеть следующим образом:

<td><span class="hidden">2015-04-18T23:48:33</span>19 April 2015</td> 

Не самый красивый код в мире, но это делает работу.

+0

такой же трюк можно использовать с сортировщиком: 'digit' - просто убедитесь, что у вас есть разделитель, например. «-» для сортировки отформатированных размеров, например, 1230000 - 1.23 МБайт –

7

Извините, что ответили на старый вопрос, но теперь это СТАНДАРТНАЯ ФУНКЦИЯ tablesorter, хотя по какой-то причине он не имеет документов. Если вы откроете файл https://github.com/christianbach/tablesorter/blob/master/jquery.tablesorter.js и посмотрите на строку # 307, вы увидите, что он поддерживает атрибут «сортировка данных».

Использование:

<td data-sort-value="42">Answer to the question</td> 
+0

Несмотря на то, что он был в коде, это не сработало без явного определения функции textExtraction для чтения этого значения. – randalv

+0

@ randalv это работало для меня без каких-либо изменений. Убедитесь, что вы используете последнюю версию своего кода JS – jazzcat

+0

Как упоминалось выше Mottie, вы также можете использовать 'data-text' –

0

Я использую

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 

<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> 

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.29.0/js/jquery.tablesorter.min.js"></script> 

Работа с данными текстом

<td data-text="42">Answer to the question</td> 

не работает с данными сортировки стоимости

<td data-sort-value="42">Answer to the question</td> 
Смежные вопросы