jQuery DataTables:我可以为Sort提供3种状态:ASC,DESC和NO_SORT吗?

单击列标题时jQuery Datatable的排序顺序仅在asc(向下箭头)和desc(向上箭头)之间切换。 即

1st-click ascending 2nd-click descending 3rd-click asc 4th-click desc || || || || || || || || odd-click asc even-click desc. 

我想引发这样的事情:

 1st-click ascending 2nd-click descending 3rd-click no-sorting 4th-click asc 5th-click desc 6th-click no-sort || || || || || || || || (n%3==1)-click asc (n%3==2)-click desc (n%3==0)-click no-sort. 

有没有办法在jQuery dataTables中改变这种行为? 请帮忙! 提前致谢。

哇,这很有趣。 这应该做你需要的,虽然它不优雅:

 $('#example').on("order.dt", function () { if(example.settings().order().length === 1){ var order = example.settings().order()[0]; var th = $("#example th:eq(" + order[0] + ")"); if(th.attr("data-sort-next") === "false"){ example.order([]).draw(); th.attr("data-sort-next", true); }else{ if(order[1] === "desc"){ th.attr("data-sort-next", false); }else{ th.attr("data-sort-next", true); } } } }); 

这个有效的JSFiddle说明了正在发生的事情。 基本上,您想要的是多列排序的开箱即用(如评论中所述)。 我所做的是拦截排序,如果只有一列被排序,而不会弄乱多列排序。 我将继续努力改进它,但这应该适合你。

当你加载一个表时,它以某种方式排序(可能由id,name或其他)。 所以你所谓的“不排序”实际上就是“按初始列排序”。

一种简单的方法是让排序机制保持原样,并在某处放置一个按钮来重新加载删除当前排序的表。 或者更好的是,使用此按钮按初始列对表进行排序。

解决了通过维护列的状态发出的数组,拦截和停止订单事件的默认行为,然后手动执行:

 var dir = 'asc' for ascending var dir ='desc' for descending var dir = '' for no-sort $("#table-id").dataTable.order([colIdx, dir]).draw();