2010-02-18 71 views
8

我有一個表使用ajax進行更新,如果排序後更新它,但我需要排序而不是固定的列,而是在更新之前最後單擊的同一列。Jquery Tablesorter在更新後對同一列進行排序

function tableUpdated() { 
$(".tablesorter").trigger("update"); 
//alert($(".tablesorter").sorting); 
var sorting = [[7, 0]]; 
$("table").trigger("sorton", [sorting]); 
} 

在我上面的代碼,我需要把我的選擇列索引,而不是7

回答

5

jQuery的.data()將幫助你在這裏。無論用戶何時單擊以對錶格進行排序,都將列存儲在表格本身上。在排序功能,補充一點:

$("#table").data('sorting', selectedColumn); 

現在用id="table"元素有一個屬性sortingselectedColumn值。在tableUpdated,您可以使用此數據:

function tableUpdated() { 
    $(".tablesorter").trigger("update"); 
    var sorting = [[$("#table").data('sorting'), 0]]; 
    $("#table").trigger("sorton", [sorting]); 
} 

使用.data()可以更加複雜,允許您添加數據對象的數據添加。有關更多詳細信息,請參見this page

+0

謝謝,我會試試看... – 2010-03-02 15:09:41

+0

第一:謝謝你。第二:數據查找中的0不會使其默認爲升序\降序(我忘記它是哪個),而不是用戶選擇的值? – javamonkey79 2011-03-03 21:36:40

+0

@ javamonkey79:假設這就是0,你說得對。這可能是另一個使用.data()的好地方。將排序方向保存爲表格中的另一個屬性,並在排序方向改變時更新它。 – Aaron 2011-03-04 13:36:52

0

經過一天左右的鬥爭之後,我發現datatables plugin,它具有節省開箱的狀態。我希望這可以幫助別人。

3

使用你的代碼,你可以做這樣的事情(假設你的表ID是#名單表),以維持目前的表格排序:

function tableUpdated() { 
    $("#list-table").trigger("update"); 
    var sorting = $("#list-table").get(0).config.sortList; 
    $("#list-table").trigger("sorton", [sorting]); 
} 
2

,你可以把它撿起來的「sortEnd」你的表事件:

var lastSortList; 

$table.on('sortEnd', function(e) { 
    lastSortList = e.target.config.sortList; 
}); 
0

在這裏,您可以用相同的列順序和添加一個新來分揀機

var sorting = $("table").get(0).config.sortList; 
sorting.push([2,0]); // add an element to the array 
$("table").trigger("sorton", [sorting]); 
0

它可能有點少開銷保存最後排序,只有當這樣開始的ajax:

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

更新這樣以後再賺回來的:

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

記住申報第一儘管在正確的範圍內。

相關問題