我正在使用带有分层数据的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订单指定不同排序函数的最佳方法是什么?
答案 0 :(得分: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; }
});
在另一方中排序。
答案 1 :(得分:0)
经过大量挖掘后,我设法在column.context[0].aaSorting[0][1]
下找到了当前排序方向的位置。 aaSorting
变量是一个数组数组,其底层包含当前排序列(作为整数)和排序方向(作为字符串; asc
或desc
)。< / p>
$.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 ) {
// ...
} );
};
答案 2 :(得分:0)
由于我的其他答案更符合原始问题,我会离开它,但事实证明我问的是错误的问题。 DataTables允许您在排序之前强制按特定列排序。