0

我正在使用以下代码使用标题行作为触发器对表中的列进行排序。

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]; });  
}); 

问题是,有相当多的单元格具有相同的值。当我第一次单击对表格进行排序时,它会执行预期的操作。但是,如果我再次单击它,它将重新排列那些具有相同值单元格(来自用于排序的列)的行。

我想知道是否有办法检查列是否已经排序,如果为真,则不允许重复排序。也欢迎任何替代解决方案。

谢谢!

4

2 回答 2

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;
    }
}); 
于 2012-10-26T21:38:25.000 回答
1

只需跟踪您最后对表格进行排序的方式,并忽略对同一标题的重复点击。

或者,如果用户再次单击标题,您可能希望反转排序,这是可排序列表的一种相当常见的行为。然后,您将跟踪最后排序的列和方向。

于 2012-10-26T21:44:52.367 回答