2013-08-16 35 views
0

以下是挑戰; 如何在包含超過500行的表上使用jQuery/Javascript迭代(+更改元素屬性,同時這樣做)?增加的挑戰是瀏覽器是IE8。使用jquery遍歷超過500行和15列的表格

我嘗試使用for循環和$ .each在表...我得到的東西工作,但它放慢了該死的IE和拋出腳本錯誤(錯誤:你想繼續這個腳本?它可能會減慢放下你的電腦..bla bla bla)。

問題不在於如何迭代和更改各個列的屬性,而是如何優化此過程。

任何幫助,非常感謝。

+1

這將是可能的[代碼審查(http://codereview.stackexchange.com)的upvoted的問題,但即使在那裏,你應該包括一些代碼... – Teemu

+0

爲什麼不升級瀏覽器? – Paul

回答

1

具有u試過這種

var table = document.getElementById("mytab1"); 
for (var i = 0, row; row = table.rows[i]; i++) { 
    //iterate through rows 
    //rows would be accessed using the "row" variable assigned in the for loop 
    for (var j = 0, col; col = row.cells[j]; j++) { 
    //iterate through columns 
    //columns would be accessed using the "col" variable assigned in the for loop 
    } 
} 
+0

感謝您的摘錄。我使用jquery,編碼時易於使用。然而,我試圖通過像使用for(如你所說的)進行一些調整來減少腳本的執行時間,而不是每個jquery的迭代遍歷行和列。也使用局部變量。在每個功能中使用更多的功能和更少的代碼。優化的陣列......但在最壞的情況下,在應用計算時遍歷所有500行和15列時花費的時間不到7秒。再次感謝你:) – user2182000

+0

乾杯@ user2182000 ..我很高興它幫助你.. –

2

一般情況下,如果你正在執行一個時間關鍵的任務,不使用jQuery。每個$('.classname')至少執行20條jQuery代碼行,特別是在IE8的情況下,還有大量的本地迭代文檔。

在IE8中執行的腳本行數有限制。默認情況下,它會執行一百萬行,然後詢問用戶是否要繼續腳本。這個限制是由註冊表控制的,但是對於一個web應用來說,增加課程的價值並不是有用的。

在IE8中渲染速度也是一個問題。一般

  • 嘗試

    • 使用最小的造型,以避免設置innerHTML/innerText,使用createElement() 和/或createTextNode()appendChild()和/或insertBefore() 代替。
    • 避免內聯樣式,而改變類名稱,或者甚至直接使用CSS規則操作。
    • 使用getElementsBy/Tag/Class/Name()時儘可能使用緩存元素。
    • 儘可能使用cahched table.rowstable.rows[n].cells集合。
    • 考慮一次僅顯示錶格的一部分,它使渲染速度更快。
  • +0

    嗨@Teemu,你說不要使用jquery,但對於表中的每一行,我是幾個文本字段和一個複選框。當我點擊複選框時,將會發生少量計算並填充該行的文本字段。當我點擊表頭的複選框時,它將選擇所有行並在每一行級別進行計算並填充文本框。所以它花費了大量的時間和jQuery有助於易於訪問表格的dom元素。那麼是否有任何提示可以更好地調整性能?正如user1145009提到的,我也使用了不同的迭代器...... – user2182000

    +0

    @ user2182000這很簡單,但是當你使用jQuery的時候/線條很貴。改善你看不見的代碼的性能也很困難; )。無論如何,我認爲你真的應該將你的問題和相關代碼發佈到[代碼評論](http://codereview.stackexchange.com/),那麼你就有這樣的問題。 – Teemu

    +0

    感謝您的信息:) – user2182000