如何在 desc 中使用一列的多列排序?
Posted
技术标签:
【中文标题】如何在 desc 中使用一列的多列排序?【英文标题】:How I use multi column ordering with one column in desc? 【发布时间】:2020-08-10 21:34:21 【问题描述】:这是我的数据表:
NAME SORT
Adam
Ali 101
David 102
Laura
Will
我尝试按name
列和sort
列对我的表进行排序。
我要找的结果是:
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
【问题讨论】:
【参考方案1】:更新:我在最初的帖子中遗漏了一项。我现在已将演示从 "orderData": [ 2 ]
更正为 "orderData": [ 2, 0 ]
。
两种选择:
建议的方法
演示表:
$(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 列(后跟第 1 列 - 索引 0 中的数据)进行排序时,将使用此第 3 列的数据:
"data": "name", "orderData": [ 2, 0 ] ,
在这种情况下,“2”指的是第 3 列 - 列索引从 0 开始。
另类
这可能不是您想要的,但我提到它是因为它是一个更简单的解决方案 - 尽管需要用户提供更多知识。
演示表:
$(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" ] ]
这会在表格首次显示时为您提供以下信息:
要返回到这个起点,用户必须执行以下操作:
1) 单击第 2 列的排序箭头,直到该列正确排序。
2) 按住 SHIFT 键的同时单击第 1 列,直到该列正确排序。
注意事项
替代方案更灵活,但需要用户了解用于多列排序的 SHIFT 键。
建议的方法将自动完成这项工作 - 但用户将无法使用此选项对用户名进行“纯”字母排序。如果他们不知道为什么数据按原样排序,这甚至可能会令人困惑。
【讨论】:
以上是关于如何在 desc 中使用一列的多列排序?的主要内容,如果未能解决你的问题,请参考以下文章