Javascript jquerydatatables:我可以有3种排序状态:ASC、DESC和NO_Sort吗?
jQuery Datatable在单击列标题时的排序顺序仅在asc(向下箭头)和desc(向上箭头)之间切换。i、 e 我想归纳如下:Javascript jquerydatatables:我可以有3种排序状态:ASC、DESC和NO_Sort吗?,javascript,jquery,datatable,datatables,Javascript,Jquery,Datatable,Datatables,jQuery Datatable在单击列标题时的排序顺序仅在asc(向下箭头)和desc(向上箭头)之间切换。i、 e 我想归纳如下: 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==
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数据表中的这种行为?请帮忙!
提前谢谢 当您加载一个表时,它会以某种方式排序(可能是通过id、名称或其他方式)。所以你所谓的“无排序”实际上是“按初始列排序”
一种简单的方法是让排序机制保持原样,并在某个位置放置一个按钮以重新加载删除当前排序的表。或者更好的方法是,使用此按钮按初始列对表进行排序。通过将列的状态保持为数组,截取并停止订单事件的默认行为,然后手动执行以下操作来解决问题:
var dir = 'asc' for ascending
var dir ='desc' for descending
var dir = '' for no-sort
$("#table-id").dataTable.order([colIdx, dir]).draw();
哇,真有趣。这应该可以满足您的需要,尽管它并不优雅:
$('#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);
}
}
}
});
这项工作说明了正在发生的事情。基本上,您想要的是开箱即用的多列排序(如注释中所述)。我所做的是在只有一列被排序的情况下截取排序,而不会弄乱多列排序。我将继续尝试改进它,但这对您应该有用。无排序和以前的排序模式有什么区别?排序顺序不会改变。你想做什么?我想问的是,一旦你对一列进行排序。如何删除它而不必对任何其他列进行排序?但删除排序对您意味着什么?假设我有3个列:年龄、姓名、出生日期。最初,我只按照从RESTAPI接收的顺序显示表行。然后单击年龄列标题一次。该表根据年龄asc进行排序。现在,我如何删除这个年龄排序,并返回到从API收到的表行的初始排序?因此,没有办法实现3切换状态的开箱排序?我一直在研究这个问题,有一种方法可以删除所有排序<代码>示例.order([]).draw()代码>;但我很难弄清楚如何有选择地删除给定列的排序。@jackOfAll技术上可以做到的,请看一看。但你为什么要这么做?想想看。如果要删除当前排序,那是因为要按另一列排序@例如,您可能使用SHIFT+单击来选择4个不同的列,以按它们的组合进行排序,然后删除其中一个(如果您错误地选择了1列)。然后,您只需单击按住SHIFT键的多次cpl列,即可删除该列排序。@jackOfAll这正是datatables所做的。当您选择第二列(带shift)时,如果您第三次单击,它将删除该列上的排序…此解决方案是否正确处理排序顺序的图标?出于好奇,我想看一部JSFIDLE。此外,如果你的答案解决了问题,请将其标记为已接受。是,这会处理图标。这个周末我会试着做一件事。是的,这很好。建议您在多列排序中清除单列。您可以执行以下操作:example.order([col_idx',]).draw();只清除1个特定列的排序。虽然这通常不是必需的,但除非您像我一样决定绕过SHIFT并将多列设置为默认行为。@jackOfAll空数组也会执行相同的TBH;-)我已经更新了JSFIDLE,使其更加优雅(未清除
数据属性
时出现了一个问题)。
$('#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);
}
}
}
});