我见过很多关于排序的帖子,但没有一篇回答什么是典型的场景。jQuery - 对HTML表进行排序
我想排序和使用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 + "]"));
}
有没有做到这一点更快的方法?
也许我错过了一些东西,但有没有原因你没有使用插件,如[tablesorter](http://tablesorter.com/);特别是[根据列表外链接的列索引排序](http://tablesorter.com/docs/example-trigger-sort.html)似乎是做你想做的事情 – ChrisW
或者你试过[datatables](http ://datatables.net/)?它支持按列,分页,搜索和许多其他事物进行排序。 –
@ChrisW - 我不知道tablesorter具有基于表外链接进行排序的功能。 – duckmike