如何在 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" 字母排序。如果他们不知道为什么数据按原样排序,甚至可能会造成混淆。
这是我的数据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" 字母排序。如果他们不知道为什么数据按原样排序,甚至可能会造成混淆。