jQuery循环遍历表格行/单元格的性能

3

我有一个函数,它在document.ready被调用,在一个大约有600行的由classic ASP生成的表格中循环。在“现代”浏览器(Chrome、Firefox、IE9 Beta)中,它可以在1.5-2秒内运行完毕。但在IE6中,需要5-7秒的时间,效果不好。

基本上,我正在对某些列中的单元格值进行加和,并给出小计。(我知道,这应该是在服务器端生成的,但某些聪明的人使用了调用视图的视图来开发此功能...)。

我使用了IE9的分析工具来确定瓶颈所在,看起来当调用jQuery的find和each时,瓶颈最为明显:

tr.find("td").each(function() {
&
tr.find("td").eq(ci).html(tot).css

如果有必要,我可以发布所有代码,但我想知道是否有更有效的方法循环遍历未命名的表格行和单元格?

表格如下:

32     47       0/0 0 8 1 1                 
32     47  -7   0/0 0 0   7 
Totals     -7   0/0   8 1 8  
32     47       0/0 0 2 1 1                 
32     47  -7   0/0 0 3   7 
Totals     -7   0/0   5 1 8  

我循环遍历表格行,如果我找到(td:first)=“Totals”,那么我将当前tr和前两个tr放入变量中,然后获取单元格并计算总数,并将这些总数放入相应的单元格中。
这一切都有效,但像我说的,在查找和每个过程中存在严重的瓶颈。
1个回答

4

我自己没有测试过,但有可能是所有 jQuery 扩展正在拖慢速度。尝试使用纯 JavaScript 实现,看是否能加快速度:

var rows = document.getElementById('your-table').rows;
var num_rows = rows.length;
for (var i = 0; i < num_rows; ++i) {
    var cells = rows[i].cells;
    if (cells[0].innerHTML == 'Totals') {
       var num_cells = cells.length;
       for (var j = 1; j < num_cells; ++j) {
           cells[j].innerHTML =
               (parseInt(rows[i-2].cells[j]) || 0) +
               (parseInt(rows[i-1].cells[j]) || 0);
       }
    }
 }

我会在今晚/明早尝试并报告我的发现...谢谢! - wali
1
+1 - rowscells属性是加速表格迭代的好方法。唯一需要补充的可能是在每个for循环中缓存当前行和当前单元格。这些属性查找会累积起来。 - user113716
实际上,我想这只是行而不是单元格。 - user113716
1
@patrick,我已经缓存了“table.rows[i].cells”,这是有意义的。你甚至可以进一步缓存前两行(这样在添加时,你只需引用缓存的行)。或者如果你知道表格是以3个为一组的结构,你可以从i = 2开始外层循环,只需要使用i += 3而不是++i - Ben Lee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接