jQuery Datatables多列排序方向

6

使用jquery-datatables。

示例:http://jsfiddle.net/b2fLye17/17/

$('#example').DataTable({

    filter:false,
    columnDefs: [
                    {
                        targets: [1],//when sorting age column
                        orderData: [1,2] //sort by age then by salary
                    } 
                ]
});

当您点击年龄列时,表格按年龄升序排序,然后按薪水升序排序。如果想要它按年龄升序排序,然后按薪水降序排序,您有哪些选项呢?谢谢!
-------------------------- 编辑 1 ---------------------
澄清:当按年龄列升序排序时,它应按年龄升序排序,然后按薪水降序排序。当按年龄列降序排序时,它应按年龄降序排序,然后按薪水升序排序。
-------------------------- 编辑 2 ---------------------
所需结果的图片: enter image description here
4个回答

4

使用

$(document).ready(function() {

    $('#example').DataTable({

        filter:false,
        columnDefs: [
                        {
                            orderData: [[1, 'asc'], [2, 'desc']]//sort by age then by salary
                        }
                    ]
    });
});

JS Fiddle http://jsfiddle.net/b2fLye17/13/


正如您在此示例中所看到的,它并未正常工作。http://jsfiddle.net/b2fLye17/9/ 感谢您的时间! - sebmoi
移除目标不会对薪水进行排序。在这个例子中,看起来它是工作的,因为40岁的人的薪水已经在HTML中排序了。我交换了86美元和170美元进行测试。示例:http://jsfiddle.net/b2fLye17/14/ - sebmoi
请查看此链接 - http://jsfiddle.net/b2fLye17/18/. 有很多选项可以设置排序。 - fly_ua
aaSorting在我排序列之前起到了作用。但是我需要做的是-> 当年龄列按升序排序(点击它),它应该先按年龄升序排序,然后按薪水降序排序。当年龄列按降序排序时,它应该先按年龄降序排序,然后按薪水升序排序。再次感谢您的时间!我很快会添加一个示例。 - sebmoi
1
这很有趣,我不知道如何使用DataTable选项进行配置,但我有解决方法的想法。 据我所知,表格按第一个元素内容排序,即使它是隐藏的。 因此,您可以将某些事件绑定到排序并在薪水列中创建隐藏输入。当您需要反向顺序时,此输入将为Salary * -1。 - fly_ua

2

感谢您提出这个问题,我也面临同样的问题,现在已经解决了。具体方法如下:

var oTable=$('#example').dataTable({
filter:false
});

oTable.fnSort( [[1,"asc"], [2,"desc"]]);

希望您能从中受益。


在datatables中,我们在哪里配置多重排序设置? - Dhaval Panchal

1

在这里。它有点被修改过,但我已经花了几个小时来尝试达到同样的目标 - 根据两列进行排序。 http://jsfiddle.net/b2fLye17/23/

<td data-age="40">$320</td>
//In custom sort:
var value = parseInt($(td).attr('data-age') + pad(td.innerHTML.substring(1), 10, '0'));

概念: 我还没有找到一种在foreach循环之外访问其他单元格的方法,因此我添加了一个"data-"属性到我们想要排序的单元格。这个data-属性与我们关心的另一个排序列具有相同的值... 因此在我们找到如何在循环中访问其他'相邻'单元格之前,存在一些重复数据。
我组合了两个值(隐藏属性和可见值),然后转换回int进行索引。由于这些值长度不同,我用零填充了第二列(4086 vs 40086)。

通过您的示例,我已经能够通过一些调整解决我的问题。非常感谢! - sebmoi

1
您可以使用 var row = settings.aoData._aData[i]; 获取行中的所有数据,并结合 j0xue 的解决方案,这样您就可以按另一列进行排序,而无需在 html 中添加属性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接