3

我有一个在 document.ready 上调用的函数,它循环遍历在经典 ASP 中生成的大约 600 行的表。在“现代”浏览器(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 放入变量中,然后抓取单元格并计算总计,并将这些总计放置在适当的单元格中.

这一切都有效,但就像我说的那样,在 find 和 each 过程中都有一个严重的瓶颈。

4

1 回答 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);
       }
    }
 }
于 2010-11-18T21:56:36.383 回答