Search code examples
jqueryjquery-pluginstablesorter

how to get current sort order from tablesorter plugin?


I'm just starting to use Christian Bach's excellent TableSorter plugin, and I need to get a column's current sort direction. I have several columns:

  • ID
  • Name
  • Category

ID and Name are set to non-sortable using

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

I'm adding a click handler on Name so that it fires the sort event on the Category column. Using the example "Sort table using a link outside the table", I'm able to get the Name header to fire the Category sort -- but it's hard-coded to sort in one direction.

How can I get it to look at the current direction the Category column is currently sorted, and sort in the opposite direction? (I can handle flipping the values; since the sort order is 0 or 1, I can XOR the value to get the opposite, like var sort; sort ^= sort; -- my question is how to get the current value.

Here's the code that currently sets the click handler on the Name column:

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

Thanks!


Solution

  • The table headers should all call the same click event:

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

    Then click handler should add/remove the applicable classes.

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

    I hope this helps.