Как получить текущий порядок сортировки из плагина TableSorter? - PullRequest
10 голосов
/ 24 декабря 2009

Я только начинаю использовать отличный плагин Кристиана Баха TableSorter, и мне нужно получить текущее направление сортировки столбца. У меня есть несколько столбцов:

  • ID
  • Имя
  • Категория

Идентификатор и Имя устанавливаются как несортируемые с помощью

headers:    { 0: {sorter: false}, 1: {sorter: false} }

Я добавляю обработчик кликов по имени, чтобы он вызывал событие сортировки в столбце «Категория». Используя пример " Таблица сортировки с использованием ссылки вне таблицы ", я могу получить заголовок Name для запуска сортировки по категориям, но это жестко задано для сортировки в одном направлении.

Как я могу заставить его взглянуть на текущее направление, в котором в данный момент сортируется столбец Категория, и отсортировать в обратном направлении? (Я могу справиться с переворотом значений; поскольку порядок сортировки равен 0 или 1, я могу XOR значение, чтобы получить противоположное, например var sort; sort ^= sort; - мой вопрос, как получить текущее значение.

Вот код, который в настоящее время устанавливает обработчик кликов в столбце Имя:

$("#nameCol").click(function() {
    var sorting = [[2, 0]];     /* sort 3rd col (Category) descending */
    $("#SearchResults").trigger("sorton", [sorting] );  /* SearchResults is the ID of the sortable table */
    return false;               /* cancel default link action on a#nameCol */
});

Спасибо!

Ответы [ 4 ]

23 голосов
/ 10 января 2014

Вы можете использовать встроенное событие sortEnd для получения sortOrder, как описано здесь: https://stackoverflow.com/a/4150187/363155

$('#yourtableId').on('sortEnd', function(event) {
    // Prints the current sort order to the console
    console.log(event.target.config.sortList);
});
9 голосов
/ 13 июля 2014

Вы также можете захватить его снаружи, в любом другом месте (например, в вашей функции, запуске ajax, ...), и только при необходимости, а не при каждом щелчке, с чуть меньшими издержками, такими как:

lastSortList=$("#mytable")[0].config.sortList;

И пример сортировки после обновления ajax:

$("#mytable").trigger("sorton", [lastSortList]);

Не забудьте объявить первую строку в нужной области видимости.

3 голосов
/ 21 мая 2012

Я написал функцию для сохранения текущего порядка сортировки. Это помогло мне в ситуации, когда стол перестраивался с нуля.

function SaveSortOrder(tablename) {
//returns an array of a tablesorter sort order
var hdrorder = new Array();
var hdrs = $("#" + tablename + " th");
var arrayindex = 0;
hdrs.each(function (index) {
    if ($(this).hasClass('headerSortDown')) {
        hdrorder[arrayindex] = [index, 0];
        arrayindex++;
    }
    else if ($(this).hasClass('headerSortUp')) {
        hdrorder[arrayindex] = [index, 1];
        arrayindex++;
    }       
});

return hdrorder;
}
1 голос
/ 27 декабря 2009

Заголовки таблицы должны вызывать одно и то же событие клика:

$('th').click(function() {
     handleHeaderClick(this);
});  

Затем обработчик клика должен добавить / удалить соответствующие классы.

function handleHeaderClick(hdr) {
    if ($(hdr).hasClass('headerSortDown') == true) {
        $(hdr).removeClass('headerSortDown');
        $(hdr).addClass('headerSortUp');
    } else if ($(hdr).hasClass('headerSortUp') == true) {
        $(hdr).removeClass('headerSortUp');
        $(hdr).addClass('headerSortDown');
    } else {
        $('th', myTable).removeClass('headerSortUp headerSortDown');
        $(hdr).addClass('headerSortDown');
    }
    doSomething();
};

Надеюсь, это поможет.

...