如何在 desc 中对一列使用多列排序?

How I use multi column ordering with one column in desc?

这是我的数据table:

NAME   SORT
Adam
Ali    101
David  102
Laura
Will

我尝试按 name 列和 sort 列对 table 进行排序。

我要找的结果是:

NAME   SORT
David  102  
Ali    101  
Adam
Laura
Will

这意味着,所有具有排序编号的内容都应按 sort 列排序,其他所有内容应按 name 排序。

这是我的方法:

var table = $('.datatable').DataTable({
"order": [[ 0, "asc" ]],
"columnDefs": [
  {
        "targets": [ 0 ],
        "orderData": [ 0, 1 ]
      },
],
...

但它不起作用。列仅按 name 排序。 如果我将代码更改为:

  var table = $('.datatable').DataTable({
    "order": [[ 0, "asc" ]],
    "columnDefs": [
      {
            "targets": [ 0 ],
            "orderData": [ 1, 0 ]
          },
    ],
    ...

现在正在考虑对两列进行排序,但第二列的顺序错误:

NAME   SORT
Adam
Laura
Will
Ali    101  
David  102  

更新:我在初始 post 中遗漏了一项。我现在已将演示从 "orderData": [ 2 ] 更正为 "orderData": [ 2, 0 ]

两个选项:

建议的方法

演示 table:

$(document).ready(function () {

  var data = [
    { "name": "Adam", "sort": null }, 
    { "name": "Ali", "sort": 101 }, 
    { "name": "David", "sort": 102 }, 
    { "name": "Will", "sort": null },
    { "name": "Laura", "sort": null } 
  ];

  $("#myTable").DataTable({
    data: data,
    columns: [
      { "data": "name", "orderData": [ 2, 0 ] },
      { "data": "sort" },
      { "data": null, "visible" : false,
          "render": function ( data, type, row, meta ) {
            return (!row.sort ? 999 : row.sort * -1);
          } 
        }
    ],
    order: [ [ 1, "desc" ], [ 0, "asc" ] ]
  });

});

我们引入了一个新的(隐藏)列,其中包含以下数据 - 仅针对此屏幕截图未隐藏:

当您对第 1 列进行排序时,以下内容会导致使用第 3 列的数据(后跟第 1 列 - 索引 0 中的数据):

{ "data": "name", "orderData": [ 2, 0 ] },

在这种情况下,“2”指的是第 3 列 - 列索引从 0 开始。

备选

这可能不是您想要的,但我提到它是因为它是一个更简单的解决方案 - 尽管需要用户提供更多知识。

演示 table:

$(document).ready(function () {

  var data = [
    { "name": "Adam", "sort": null }, 
    { "name": "Ali", "sort": 101 }, 
    { "name": "David", "sort": 102 }, 
    { "name": "Will", "sort": null },
    { "name": "Laura", "sort": null }
  ];

  $("#myTable").DataTable({
    data: data,
    columns: [
      { "data": "name" },
      { "data": "sort" }
    ],
    order: [ [ 1, "desc" ], [ 0, "asc" ] ]
  });

});

此行设置初始排序顺序:

order: [ [ 1, "desc" ], [ 0, "asc" ] ]

当 table 首次显示时,这会为您提供以下信息:

要return到这个起点,用户必须执行以下操作:

1) 单击第 2 列的排序箭头,直到正确排序该列。

2) 按住 SHIFT 键的同时单击第 1 列,直到该列正确排序。

备注

替代方案更灵活,但需要用户了解用于多列排序的 SHIFT 键。

建议的方法将自动完成这项工作 - 但用户将无法使用此选项对用户名进行 "pure" 字母排序。如果他们不知道为什么数据按原样排序,甚至可能会造成混淆。