我刚开始使用Christian Bach优秀的TableSorter插件,我需要获得列的当前排序方向。我有几个专栏:
使用
将ID和名称设置为不可排序headers: { 0: {sorter: false}, 1: {sorter: false} }
我在Name上添加了一个click处理程序,以便它在Category列上触发sort事件。使用示例“Sort table using a link outside the table”,我可以获取Name标头来触发Category排序 - 但它是硬编码的,可以在一个方向排序。
如何让它查看“类别”列当前排序的当前方向,并按相反的方向排序? (我可以处理翻转值;因为排序顺序是0或1,我可以对值进行异或,以获得相反的结果,如var sort; sort ^= sort;
- 我的问题是如何获取当前值。
以下是当前在“名称”列上设置点击处理程序的代码:
$("#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 */
});
谢谢!
答案 0 :(得分:23)
您可以使用内置的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);
});
答案 1 :(得分:9)
你也可以在外面,其他任何地方(例如你的函数,ajax的开始......)捕获它,并且仅在需要时捕获它,而不是在每次点击时捕获它,如下所示:
lastSortList=$("#mytable")[0].config.sortList;
以及在ajax更新后对其进行排序的示例:
$("#mytable").trigger("sorton", [lastSortList]);
请记住在正确的范围内声明第一行。
答案 2 :(得分: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;
}
答案 3 :(得分:1)
表标题应该都调用相同的click事件:
$('th').click(function() {
handleHeaderClick(this);
});
然后单击处理程序应添加/删除适用的类。
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();
};
我希望这会有所帮助。