JQuery Tablesorter: emptyTo: ‘bottom’ не работает для пользовательского парсера

Я использую JQuery Tablesorter версии 2.17.8 для сортировки таблицы
Я создал собственный синтаксический анализатор для сортировки даты, затем времени и необязательной строки.

Парсер выглядит так:

$.tablesorter.addParser({
id: "datetime",
is: function (s) {
return /\d{2}\-\d{2}\-\d{2}\s\d{2}:\d{2}(door \w+)?/.test(s);
}, format: function (s) {
arr = s.split(/[\s\-:]/);
if(arr[0] == "") // table column is empty
timestamp = null;
else {
// Month is zero-indexed so subtract one from the month inside the constructor
date = new Date(Date.UTC('20' + arr[2], arr[1] - 1, arr[0], arr[3], arr[4])); // Y M D H M
timestamp = date.getTime();
}
console.log(timestamp);
return timestamp;
}, type: "numeric"});

Пример данных столбца таблицы для сортировки:

  • 30-04-14 09:55
  • 30-04-14 14:11 дверь I1
  • Пустая ячейка

Парсер работает как задумано, но я хочу, чтобы пустые ячейки были отсортированы снизу, и это, похоже, не работает.

Я поместил это в мой файл PHP:

<script type="text/javascript">
{literal}
$(document).ready(function()
{
$("#betalingen").tablesorter( {
headers: {
5 : { sorter: false } },        // disable sorting for column #5
widgets: ["saveSort", "zebra"],     // apply alternating row coloring
sortList: [[2,0]],                  // initial sorting order for Date column = ascending (0)
emptyTo: 'bottom'                   // empty cells are always at the bottom
}
);
} );
{/literal}
</script>

Обратите внимание, что я попробовал каждый вариант здесь: http://mottie.github.io/tablesorter/docs/example-option-sort-empty.html
И когда я удаляю свой пользовательский анализатор (и позволяю Tablesorter выяснить синтаксический анализатор), он сортирует пустые ячейки снизу, как и предполагалось, но, очевидно, столбец сортируется неправильно.

Кто-нибудь знает, что здесь происходит?

0

Решение

Вам нужно немного подправить свой парсер.

  • Вам не нужно is функция, так как вы можете установить синтаксический анализатор на столбец и не нужно автоматически его обнаруживать.
  • Как заметил @karlingen, когда ячейка пуста, вы все равно возвращаетесь timestamp который был установлен в нуль; он сохраняется как ноль, а не как пустая строка.

    $.tablesorter.addParser({
    id: "datetime",
    is: function (s) {
    // no need to auto-detect
    return false;
    },
    format: function (s) {
    var date, timestamp,
    arr = s.split(/[\s\-:]/);
    if (arr[0] !== "") {
    // Month is zero-indexed so subtract one from the month inside the constructor
    date = new Date(Date.UTC('20' + arr[2], arr[1] - 1, arr[0], arr[3], arr[4])); // Y M D H M
    timestamp = date.getTime();
    }
    // is date really a date?
    return date instanceof Date && isFinite(date) ? timestamp : s;
    },
    type: "numeric"});
    
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]