Javascript jQuery-对HTML表进行排序
我看过很多关于排序的帖子,但是没有一篇能够回答典型的情况 我尝试使用jQuery对HTML表进行排序,其中我单击以对列进行排序的链接不存在于正在排序的表中。我“伪造”一个表格标题以适应滚动表格的要求 我现在做的是-Javascript jQuery-对HTML表进行排序,javascript,jquery,Javascript,Jquery,我看过很多关于排序的帖子,但是没有一篇能够回答典型的情况 我尝试使用jQuery对HTML表进行排序,其中我单击以对列进行排序的链接不存在于正在排序的表中。我“伪造”一个表格标题以适应滚动表格的要求 我现在做的是- 加载一个数组,该数组包含需要修改的列中的值 与行id一起选择 根据这些值对该数组进行排序 根据排序数组中的索引将行插入HTML表 正如预期的那样,这需要近10秒才能在本地运行 代码示例- var sortArr = new Array(); $('tr td.' + name)
- 加载一个数组,该数组包含需要修改的列中的值 与行id一起选择
- 根据这些值对该数组进行排序
- 根据排序数组中的索引将行插入HTML表
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 + "]"));
}
var sortArr=new Array();
$('tr td.'+name).each(函数(){
ResidentID=$(this.parent().attr(“ResidentID”);
BID=$(this.parent().attr(“brecordd”);
if($(this).find('select').length>0){//ddls
columnText=$(this).find('select option:selected').text();
push({residentId:residentId,bID:bID,text:columnText});
}
else if($(this).find('input').length>0){//Textbox或复选框
columnText=$(this.find('input').val();
push({residentId:residentId,bID:bID,text:columnText});
}
});
if(sortDirection==“升序”){
colHeader.attr('sortorder','descending')
sortArr=sortArr.sort(函数(v,t){
返回v.text.localeCompare(t.text);
});
}
否则{
colHeader.attr('sortorder','singressing')
sortArr=sortArr.sort(函数(v,t){
返回t.text.localeCompare(v.text);
});
}
for(var i=0;itbody>tr”).eq(i).之后($(“[id$=trFixedDataRow\uuu3”+sortArr[i].residentId+”));
$(“[id$=residentDetailDataTable]>tbody>tr”).eq(i).after($”(“[id$=trResScrollDataRow_u“+Sortar[i].residentId+”)));
$(“[id$=bDetailDataTable]>tbody>tr”).eq(i).after($(“[id$=trBScrollDataRow_u”+sortArr[i].bmrID+“]);
}
有没有更快的方法来实现这一点?您查找要排序的列、对其排序并重新填充表的方法是正确的。但你这样做似乎效率低下。你可以做一些事情来加快速度
$(this)
。将其缓存在局部变量中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 + "]"));
}
for(变量i=0;itbody>tr”).eq(i).之后($(“[id$=trFixedDataRow\uuu3”+sortArr[i].residentId+”));
$(“[id$=residentDetailDataTable]>tbody>tr”).eq(i).after($”(“[id$=trResScrollDataRow_u“+Sortar[i].residentId+”)));
$(“[id$=bDetailDataTable]>tbody>tr”).eq(i).after($(“[id$=trBScrollDataRow_u”+sortArr[i].bmrID+“]);
}
您能保存
$(“[id$=…tr”)的结果吗
在for循环之前放入一个变量,这样jquery就不必在每次迭代中都查找它了?而且您可以自己为缓存数据编制索引?坚持这种排序方式似乎是唯一的方法。也许我遗漏了一些东西,但是您没有使用插件的原因是什么;特别是,请参见ms做您想做的事情您试过了吗?它支持按列排序、分页、搜索和许多其他功能。@ChrisW-我不知道tablesorter具有基于表外链接排序的功能。@ChrisW-另外,我正在基于在3个表中的任何一个表外单击,对行中具有相应ID的3个表进行排序。Cl在第一个表的第3列上单击会生成一个我在其他两个表中使用的有序id列表。这似乎是可行的,但它并没有将行放入正确的索引中。