Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquerydatatables:我可以有3种排序状态:ASC、DESC和NO_Sort吗?_Javascript_Jquery_Datatable_Datatables - Fatal编程技术网

Javascript jquerydatatables:我可以有3种排序状态:ASC、DESC和NO_Sort吗?

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==

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==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);
            }
        }
    }
});