並べ替えに関する多くの投稿を見てきましたが、典型的なシナリオと思われるものに答えるものはありません。
jQueryを使用してHTMLテーブルをソートしようとしていますが、列をソートするためにクリックしたリンクが、ソートされているテーブル内に存在しません。スクロール テーブルの要件に対応するために、テーブル ヘッダーを「偽造」します。
私が今していることは -
- 行IDとともに選択する必要がある列内の値を含む配列をロードします
- それらの値に基づいてその配列をソートします
- その並べ替えられた配列のインデックスに基づいて、行を HTML テーブルに挿入します。
予想どおり、これをローカルで実行するには 10 秒近くかかります。
コードサンプル -
var sortArr = new Array();
$('tr td.' + name).each(function () {
ResidentID = $(this).parent().attr("ResidentID");
BID = $(this).parent().attr("BRecordID");
if ($(this).find('select').length > 0) { //ddls
columnText = $(this).find('select option:selected').text();
sortArr.push({ residentId: ResidentID, bID: BID, text: columnText });
}
else if ($(this).find('input').length > 0) {//Textbox or checkboxes
columnText = $(this).find('input').val();
sortArr.push({ residentId: ResidentID, bID: BID, text: columnText });
}
});
if (sortDirection == 'ascending') {
colHeader.attr('sortorder', 'descending')
sortArr = sortArr.sort(function (v, t) {
return v.text.localeCompare(t.text);
});
}
else {
colHeader.attr('sortorder', 'ascending')
sortArr = sortArr.sort(function (v, t) {
return t.text.localeCompare(v.text);
});
}
for (var i = 0; i < sortArr.length; i++) {
$("[id$=fixedDataTable] > tbody > tr").eq(i).after($("[id$=trFixedDataRow_" + sortArr[i].residentId + "]"));
$("[id$=residentDetailDataTable] > tbody > tr").eq(i).after($("[id$=trResScrollDataRow_" + sortArr[i].residentId + "]"));
$("[id$=bDetailDataTable] > tbody > tr").eq(i).after($("[id$=trBScrollDataRow_" + sortArr[i].bmrID + "]"));
}
これを達成するためのより速い方法はありますか?