2009-12-23 28 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

相关问题