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

問題は、同じ値のセルがかなりあることです。初めてテーブルをクリックして並べ替えると、期待どおりの結果が得られます。ただし、もう一度クリックすると、同じ値のセル(並べ替えに使用されている列から)が含まれている行が再配置されます。

列がすでに並べ替えられているかどうかを確認する方法があるかどうか、trueの場合は繰り返し並べ替えを許可しないかどうか疑問に思いました。代替ソリューションも歓迎します。

ありがとう!

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 に答える