jQueryテーブルの並べ替えスクリプトを作成しています。はい、はい、私はそのためのプラグインがあることを知っていますが、他の誰かのコートの尾を取り除くことの楽しみはどこにありますか(学習と理解の完全な欠如は言うまでもありません)?
ですから、アルファ型については良いソートが行われています。現在、数値ソートに取り組んでいます。
とても速くて汚い。列の値を取得し、それらを配列にプッシュします。
var counter = $(".sort tr td:nth-child("+(columnIndex+1)+")").length;
for (i = 1; i <= counter; i++) {
columnValues.push($(".sort tr:eq("+i+") td:eq("+columnIndex+")").text());
}
次に、それらの配列を並べ替えます。
columnValues.sort(function(a,b){
return a-b
});
次に、一意のエントリを確認します(これは主に同じ名前の場合です)。
$.each(columnValues, function(i, el){
if($.inArray(el, uniqueColumns) === -1) uniqueColumns.push(el);
});
次に、配列をキーのリストとして使用して、テーブルからデータを取得し、別の配列にプッシュします。ここで問題が発生します。名前の場合は問題なく機能しますが、番号(3、30、36)では機能しません。3で始まるソートされたリストでは、30および/または36の3を確認し、それを取得します。
これが私が試したことです:
for (i = 0; i < counter; i++) {
var key = uniqueColumns[i];
$(".sort tr:contains("+key+") td").each(function(){
rowValues.push($(this).text());
});
}
と:
for (i = 0; i < counter; i++) {
var key = uniqueColumns[i];
$(".sort tr td").filter(function(i){
if($(this).text() === key) {
rowValues.push($(this).text());
}
});
}
これは、最初のコードセット(2番目のコードよりもうまく機能する)でコードを実行するフィドルです。
アップデート:
また、これを試してみました(まだ機能しておらず、最初の並べ替えでは機能しますが、その後は機能しません):
for (i = 0; i < counter; i++) {
var key = uniqueColumns[i];
var found = false;
$(".sort tr:contains("+key+")").filter(function(j){
$(this).children().each(function(){
if ($(this).text() === key) {
found = true;
}
});
$(this).children().each(function(){
if (found) {
rowValues.push($(this).text());
}
});
});
}