2010-11-18 25 views
3

我有一個在document.ready上調用的函數,它循環遍歷一個表,其中大約有600行是在傳統ASP中生成的。在「現代」瀏覽器(Chrome,Firefox,IE9 Beta)中,它在1.5-2秒內運行。在IE6中運行時間約爲5-7秒,並不理想。jQuery通過TableRows/Table單元循環執行性能

基本上我正在做的是在某些列中添加單元格的值並給出小計。 (我知道,這應該在服務器端生成,但有些腦筋急轉彎的人使用視圖調用視圖,誰調用視圖,誰調用視圖...)。

我用IE9的探查,試圖得到的,其中瓶子頸部感,這似乎是最深刻的,當jQuery的查找和每個被稱爲:

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:第一)=「總計」然後我把當前的TR,和前面兩個TR的變量,然後抓住單元格並計算總數,然後將這些總數放在適當的單元格中。

這一切都有效,但就像我說的那樣,在查找過程中和每個過程中都有嚴重的瓶頸。

回答

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); 
     } 
    } 
} 
+0

我會在今晚/早上試試它並報告我的發現...謝謝! – wali 2010-11-18 21:58:21

+1

+1 - 「rows」和「cells」屬性是加快表迭代的好方法。只有我可能會添加的是緩存當前行和當前單元格在每個for循環中。這些屬性查找加起來。 – user113716 2010-11-18 21:59:12

+0

......實際上,我想這只是排。不是細胞。 – user113716 2010-11-18 22:06:18