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]); 

记住申报第一尽管在正确的范围内。

相关问题