首页 文章

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

提问于
浏览
0

我正在使用带有分层数据的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

当用户再次单击“food”列时,它应按如下顺序排序:

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进行排序,则无法从函数内部了解 . What is the best way to specify a different sort function for ASC vs. DESC order on a given column?

3 回答

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

    在另一个中排序 .

  • 0

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

    $.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 ) {
            // ...
        } );
    };
    
  • 0

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

相关问题