jQuery tablesorter: Как отключить сортировку по столбцу, используя класс вместо «встроенного JSON»? - PullRequest
6 голосов
/ 08 июля 2011

Я использую плагин jQuery tableorter . Я знаю, как отключить сортировку по столбцу с помощью плагина метаданных jQuery:

<th class="{sorter: false}">Don't sort me</th>

Но я бы предпочел сделать это, установив класс, поэтому мне не нужно использовать дополнительный плагин. Также я думаю, что запомнил бы имя класса проще, чем запоминание этого синтаксиса JSON. Как я могу сделать то же самое, используя этот синтаксис:

<th class="not-sortable">Don't sort me</th>

Ответы [ 4 ]

17 голосов
/ 20 августа 2011

Вам не нужно изменять источник плагина. Предполагая, что ваш th класс для не сортировки называется nosort:

function setupTablesorter() {
    $('table.tablesorter').each(function (i, e) {
        var myHeaders = {}
        $(this).find('th.nosort').each(function (i, e) {
            myHeaders[$(this).index()] = { sorter: false };
        });

        $(this).tablesorter({ widgets: ['zebra'], headers: myHeaders });
    });    
}
16 голосов
/ 23 апреля 2013

Согласен, встроенный JSON был странным. Если вы используете tableorter v2.3 или новее, вы можете использовать роли данных, чтобы делать то же самое - и вам не нужно использовать плагин метаданных:

<th data-sorter="false">...</th>

намного чище. Обратите внимание, что для этого требуется jQuery.

Для получения дополнительной информации и демо: http://mottie.github.io/tablesorter/docs/example-parsers-jquery-data.html

Всего наилучшего!

  • Ben
11 голосов
/ 08 июля 2011

Я думаю, что единственный способ заставить это работать - это изменить исходный код плагина.

В jquery.tablesorter.js, строка 483:

function checkHeaderMetadata(cell) {
   if (($.metadata) && ($(cell).metadata().sorter === false)) {
       return true;
   };
   return false;
}

Измените этот код на:

function checkHeaderMetadata(cell) {
   if ((($.metadata) && ($(cell).metadata().sorter === false)) || $(cell).hasClass("not-sortable")) {
       return true;
   };
   return false;
}

Теперь функция checkHeaderMetadata также возвращает true, если в ячейке есть класс с именем not-sortable.

2 голосов
/ 30 ноября 2014

Начиная с версии 2.0.x вы можете при инициализации решить, какой столбец не сортировать.

Добавьте свойство с именем headers и перед каждым нужным столбцом укажите свойство sorter со значением false. Подсчет столбцов начинается с 0.

jQuery('#element').tablesorter({
    headers: {
        // first column
        0: {
            sorter: false
        },
        // third column
        2: {
            sorter: false
        }
    }
});

Пример взят из документов .

...