我使用的是带有分层数据的DataTables库。我想要做的是使组始终以相同的顺序出现,并使列排序仅在组中应用。
例如,下表如下:
GROUP FOOD
===================
fruit banana
fruit pear
fruit apple
meat steak
meat chicken
meat pork
vegetable zucchini
vegetable broccoli
vegetable tomato当用户单击"food“列时,它应该按以下方式进行排序:
GROUP FOOD ▲
===================
fruit apple
fruit banana
fruit pear
meat chicken
meat pork
meat steak
vegetable broccoli
vegetable tomato
vegetable zucchini当用户再次单击"food“列时,应该按以下方式对降序进行排序:
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这个例子展示了如何编写自定义排序函数;但是,无法从函数内部知道列是排序为ASC还是DESC。--在给定列上为ASC和DESC顺序指定不同排序函数的最佳方法是什么?
发布于 2014-07-08 16:00:46
通常,对于这些类型的表,您可以指定排序函数,并且将返回值从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; }
});另一种分类。
发布于 2014-07-09 15:19:19
经过大量的挖掘,我设法找到了当前排序方向的位置,在column.context[0].aaSorting[0][1]下面。aaSorting变量是数组数组,其底层包含当前排序列(作为整数)和排序方向(作为字符串;asc或desc)。
$.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 ) {
// ...
} );
};发布于 2014-07-09 16:04:44
既然我的另一个答案更符合原来的问题,我就不提了,但原来我问错了问题。DataTables允许您在按其他列排序之前强制按特定列进行排序。
https://stackoverflow.com/questions/24636193
复制相似问题