Использование jQuery tablesorter для сортировки дат мм / гг
-
19-08-2019 - |
Вопрос
Я использую плагин jquery tablesorter для сортировки таблицы.В одном из моих столбцов в моей таблице указана дата в формате мм / гг.
<tr>
<td class="col-name">...</td>
...
<td rel="2000" class="col-dob">10/00</td>
...
</tr>
<tr>
<td class="col-name">...</td>
...
<td rel="1986" class="col-dob">11/86</td>
...
</tr>
Примечание:
- Каждая ячейка имеет уникальный класс
- Дата отображается в формате мм/гг
- Ячейка с датой также получает год
Мой код jQuery выглядит следующим образом:
// add parser through the tablesorter addParser method
$.tablesorter.addParser({
// set a unique id
id: 'user-birthdate',
is: function(s) {
// return false so this parser is not auto detected
return false;
},
format: function(s) {
// format your data for normalization
var dateSplit = s.split('/');
if(2 !== dateSplit.length)
return 0;
return new Date(dateSplit[1], dateSplit[0], 1);
},
// set type, either numeric or text
type: 'numeric'
});
myClass.init = function() {
$('.module .user table').tablesorter({
sortList: [[0,0]],
widgets: ['zebra'],
headers: {
5: {
sorter:'user-birthdate'
}
}
});
}
myClass.init();
Моя проблема в том, что tableSorter интерпретирует 00 как 1900 год вместо 2000, и, следовательно, отсортированные данные неверны.
Есть какие-нибудь подсказки, как я могу это решить?Я использую jQuery 1.2.6 и последнюю версию tablesorter.
Решение
Я обнаружил, что документация tablesorter часто довольно бесполезна.IT выглядит как будто это говорит о многом, но не хватает деталей.
В этом случае он не сообщает вам сигнатуру функции для синтаксического анализатора.К счастью, вы можете прочитать необработанный код чтобы найти это.
Там мы обнаруживаем, что metadata
синтаксический анализатор делает это:
format: function(s,table,cell) {
Это означает, что вы можете настроить свой метод форматирования таким образом, чтобы:
format: function(s, table, cell) {
// format your data for normalization
var dateSplit = s.split('/');
var year = $(cell).attr('rel');
if(2 !== dateSplit.length)
return 0;
return new Date(year, dateSplit[0], 1);
},
Или, по крайней мере, похоже на это.На самом деле я этого не тестировал.Но это должно быть, по крайней мере, очень близко.
Другие советы
Я думаю, вы обнаружите, что ваша проблема заключается в конструкторе даты и двухзначной строке года, которую вы передаете без устранения неоднозначности: new Date(dateSplit[1], dateSplit[0], 1);
Я не думаю, что вы можете (легко) получить доступ к rel на основе s в анализаторе.Содержит ли s все содержимое ячейки?Можете ли вы сделать что-то с данными в ячейке, например: <span style="display : none">CC</span>MM/YY
, удалите теги, а затем объедините CC с YY в вашем синтаксическом анализе?