我使用以下代码使用标题行作为触发器对表中的列进行排序。
var tr = d3.selectAll("tbody tr");
d3.selectAll("thead th").data(forsort).on("click", function(k) {
tr.sort(function(a,b){
return a[k] - b[k]; });
});
问题是,有相当多的单元格具有相同的值。当我第一次点击对表格进行排序时,它会完成预期的操作。但是,如果我再次单击它,它将重新排列那些具有相同值单元格的行(来自用于排序的列)。
我想知道是否还有检查列是否已经排序,如果是,则不允许重复排序。 任何替代解决方案也是受欢迎的。
谢谢!
答案 0 :(得分:3)
这是一个想法:
var tr = d3.selectAll("tbody tr");
lastSort = null;
d3.selectAll("thead th").data(forsort).on("click", function(k) {
if(lastSort != k){
tr.sort(function(a,b){
return a[k] - b[k];
});
lastSort = k;
}
});
答案 1 :(得分:1)
只需跟踪您最后如何对表格进行排序,并忽略对同一标题的重复点击。
或者,如果用户再次单击标题,您可能希望反转排序,这对于可排序列表来说是相当常见的行为。然后,您将跟踪最后排序的列和方向。