【问题标题】:DataTables sort differently asc/descDataTables 以不同的方式按 asc/desc 排序
【发布时间】:2014-08-29 10:43:12
【问题描述】:

我正在使用带有分层数据的 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 顺序指定不同排序函数的最佳方法是什么?

【问题讨论】:

  • 可能得到一个小提琴?

标签: javascript sorting datatable


【解决方案1】:

通常使用这些类型的表,您可以指定排序函数,并将返回值从 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; }
});

按其他排序。

【讨论】:

  • 此注释与 DataTables 无关。虽然我可以轻松实现升序或降序排序,但我正在寻找的是 DataTables 如何公开给定列上哪个排序处于活动状态。
  • 你能在你的排序函数中存储一个变量,还是在将保持当前排序类型的范围之外存储一个变量?
  • 这样一个变量的存在是我在这个问题中寻找的:)
【解决方案2】:

经过大量挖掘,我设法在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 ) {
        // ...
    } );
};

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2014-07-11
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      • 2015-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多