DataTables以不同的方式排序asc / desc

时间:2014-07-08 15:45:14

标签: javascript sorting datatable

我正在使用带有分层数据的DataTables库。我希望做的是让组始终以相同的顺序出现,并且列排序仅适用于组内。

例如,使用下表:

GROUP     FOOD
===================
fruit     banana
fruit     pear
fruit     apple
meat      steak
meat      chicken
meat      pork
vegetable zucchini
vegetable broccoli
vegetable tomato

当用户点击"食物"列,它应按升序排序如下:

GROUP     FOOD ▲
===================
fruit     apple
fruit     banana
fruit     pear
meat      chicken
meat      pork
meat      steak
vegetable broccoli
vegetable tomato
vegetable zucchini

当用户点击"食物"再次列,它应按如下顺序排序:

GROUP     FOOD ▼
===================
fruit     pear
fruit     banana
fruit     apple
meat      steak
meat      pork
meat      chicken
vegetable zucchini
vegetable tomato
vegetable broccoli

然而,实际行为是它也反转了组的顺序:

GROUP     FOOD ▼
===================
vegetable zucchini
vegetable tomato
vegetable broccoli
meat      steak
meat      pork
meat      chicken
fruit     pear
fruit     banana
fruit     apple

This example显示了如何编写自定义排序函数;但是,如果列被排序为ASC或DESC,则无法从函数内部了解。 在给定列上为ASC与DESC订单指定不同排序函数的最佳方法是什么?

3 个答案:

答案 0 :(得分:0)

通常使用这些类型的表,您可以指定排序函数,并将返回值从1切换为-1将更改排序。例如:

items.sort(function(a, b){
    if (a < b) { return 1; }
    else if (a === b) { return 0; }
    else { return -1; }
});

向一个方向排序,

items.sort(function(a, b){
    if (a < b) { return -1; }
    else if (a === b) { return 0; }
    else { return 1; }
});

在另一方中排序。

答案 1 :(得分:0)

经过大量挖掘后,我设法在column.context[0].aaSorting[0][1]下找到了当前排序方向的位置。 aaSorting变量是一个数组数组,其底层包含当前排序列(作为整数)和排序方向(作为字符串; ascdesc)。< / p>

$.fn.dataTable.ext.order['grouped-item'] = function(settings, col){
    var column = this.api().column(col);
    var sortOrder = column.context[0].aaSorting[0][1];
    return column.data().sort(function(a,b){
        // ...
    }).map( function ( x, i ) {
        // ...
    } );
};

答案 2 :(得分:0)

由于我的其他答案更符合原始问题,我会离开它,但事实证明我问的是错误的问题。 DataTables允许您在排序之前强制按特定列排序。