2009-12-23 71 views
10

我剛開始使用Christian Bach的優秀TableSorter插件,我需要獲得一列的當前排序方向。我有幾個列:如何從tablesorter插件獲取當前排序順序?

  • ID
  • 名稱
  • 類別

ID和名稱設置爲不使用排序

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

我加入一個點擊處理程序名稱上,以便在類別列中激發排序事件。使用示例「Sort table using a link outside the table」,我可以獲得名稱標題以觸發類別排序 - 但是它是硬編碼的,可以向一個方向排序。

我怎樣才能看到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 */ 
}); 

感謝

回答

1

表頭都應該調用相同的單擊事件:

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

然後CLI ck處理程序應該添加/刪除適用的類。

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

我希望這會有所幫助。

+0

噢,當然!我專注於通過一些API調用獲得狀態,但是它在類屬性中表達......只是測試它。很RESTy。謝謝! – Val 2009-12-27 07:36:14

3

我寫了一個函數來保存當前的排序順序。這幫助我擺脫了從頭開始重建桌子的情況。

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

您可以使用內置的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

您也可以捕捉到它之外,其他地方(例如,在你的函數,AJAX的開始, ..),只有在需要的時候,而不是在每一次點擊,用少一點的開銷是這樣的:

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

和舉例AJAX更新後再次分類整理:

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

請記住要在正確的範圍中聲明第一行。

+1

這個解決方案比接受的答案要好得多。 – 2016-11-09 15:42:14

相關問題