我有一个html表,它根据每个表行的自定义属性值的CSV列表重新排序。我正在使用以下功能来做到这一点:

for (var i = 0; i < arrCSV.length; i++)
{
  $('#' + tableId)
      .find('[fname = ' + arrCSV[i] + ']')
      .eq(0)
      .parents('tr')
      .eq(0)
      .appendTo('#' + tableId);
}


表结构为:

<table>
<tr>
 <td fname='f1'>something here</td>
</tr>
<tr>
 <td fname='f2'>something here</td>
</tr>
</table>


CSV可能是这样的“ f2,f1”

我发现这是执行速度非常慢的功能。非常感谢您提供任何优化方面的帮助。

编辑:
根据http://www.learningjquery.com/2009/03/43439-reasons-to-use-append-correctly上的文章,通过使用html串联字符串仅调用一次append,可以最大程度地提高性能。有人可以帮助使用这种技术解决我的问题吗?我不确定如何在for循环中获取s HTML并将其附加一次。

最佳答案

我建议尽可能少地查找元素。使用感兴趣的属性值作为键,将所有匹配的行存储到“哈希”中。遍历CSV,从哈希中选择相应的行,将其推入数组,然后使用先前找到的jQuery对象将数组的元素最后附加到表中。

var table = $('#' + tableId);
var rowHash = {};
table.find('[fname]').each( function() {
    rowHash[$(this).attr('fname')] = $(this).closest('tr');
});
var rows = [];
for (var i = 0; i < arrCSV.length; ++i)
{
    var row = rowHash[arrCSV[i]];
    if (row) {
       rows.push(row);
    }
}
$(rows).appendTo(table);


编辑:这似乎对我之前的代码略有改进,在我之前的代码中,我将每行追加到表中。我在具有1000行的表上进行了测试,对需要完全反转的表进行排序似乎需要大约1秒。

关于javascript - jQuery appendTo非常慢!,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1069596/

10-12 13:18