Подтвердить что ты не робот

Как получить текущий порядок сортировки от плагина tablesorter?

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

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

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

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

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

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

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

$("#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 */
});

Спасибо!

4b9b3361

Ответ 1

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

$('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();
};

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

Ответ 2

Вы можете использовать встроенное событие sortEnd, чтобы получить sortOrder, как описано здесь: fooobar.com/questions/394403/...

$("#yourtableId").on("sortEnd", function(event) {
    // prints the current sort order to the console
    console.log(event.target.config.sortList);
});

Ответ 3

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

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

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

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

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

Ответ 4

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

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;
}