сортировщик jquery сортирует пустые ячейки таблицы - PullRequest
5 голосов
/ 16 февраля 2012

У меня есть таблица со столбцом с числами, охватывающими приблизительно от -10 до 10, и несколькими пустыми столбцами.

Я бы хотел, чтобы таблица сортировки всегда помещала пустые столбцы внизу таблицы. Даже если я сортирую по возрастанию или по убыванию.

Как это:

-1
0
2
3
<empty cell>
<empty cell>

или как это:

3
2
0
-1
<empty cell>
<empty cell>

Обратите внимание, что моя проблема такая же, как вопрос 4792426 , за исключением того, что я хочу пустые ячейки внизу как при сортировке по убыванию, так и по возрастанию.

Удаление строк не вариант.

Ответы [ 3 ]

7 голосов
/ 17 февраля 2012

Я нашел способ решить мою проблему.

Решение, предоставленное ssell, не сработало. Данные таблицы анализируются только один раз, поэтому вы не можете использовать глобальную переменную для управления ею. Хорошая попытка, хотя! : -)

Это необходимый код. Как видите, я перегружаю функции formatFloat и formatInt, чтобы они возвращали null вместо значения по умолчанию: 0 . Функция сортировки внутри TableSorter делает все остальное для меня волшебным образом.

        $(document).ready(function () {
        $.tablesorter.formatInt = function (s) {
            var i = parseInt(s);
            return (isNaN(i)) ? null : i;
        };
        $.tablesorter.formatFloat = function (s) {
            var i = parseFloat(s);
            return (isNaN(i)) ? null : i;
        };
        $("#table").tablesorter();
    });

Насколько я знаю, мое решение недокументировано, но работает нормально.

2 голосов
/ 01 февраля 2016

В более поздних версиях плагина jQuery tablesorter вы можете добавить сортировщик другого типа в заголовки, чтобы автоматически ставить пустое / нулевое или строковое значение (если, например, вы вводите «-» вместо нулевого), где вы хотите (top / bottom).

<th class="{'sorter': 'digit', 'string': 'bottom'}">Count</th>

Это способ встроить его непосредственно в html / templates.Но если у вас есть согласованность в количестве столбцов, вы можете сделать это в исходной функции сортировщика таблиц.

$('table').tablesorter(
    headers: {
       1: { sorter: "digit", empty : "top" },
       2: { sorter: "digit", string: "bottom"}
    }
)

В любом случае все работает нормально, но это в основном заставляет все, что вы положили в качестве второго k, v объекта заголовка,имеет приоритет над сортировкой обычным способом.

Дополнительную информацию можно найти в документах для таблиц .

0 голосов
/ 31 мая 2016

Если это может кому-нибудь помочь, вот как я это сделал для текста.

function emptyAtBottomTextSorter(a, b, direction, column, table) {
    if (a == "") {
        a = direction ? "ZZZZZ" : "";
    }
    if (b == "") {
        b = direction ? "ZZZZZ" : "";
    }
    return ((a < b) ? -1 : ((a > b) ? 1 : 0));
}

$("#myTable").tablesorter({
    headers: {
        1 : {'sorter' : 'text'}
    },
    textSorter: {
        1 : emptyAtBottomTextSorter
    }
});

Работа с Tablesorter v2.26.2

...