我看过很多关于排序的帖子,但没有一个回答似乎是典型的场景。
我正在尝试使用 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 + "]"));
}
有没有更快的方法来实现这一点?