2011-02-27 19 views
1

在JavaScript函數結束之前是否有修改和更新文檔的方法?例如(不是我實際上做的,但足夠接近):在函數結束之前更改文檔

function longloop(){ 
    for(var i=0;i<100;i++){ 
     x = someLengthyFunction(); 
     document.getElementById('aTable').innerHTML+='<tr><td>' + x + '</td></tr>'; 
    } 
} 

這個功能得到由按下一個按鈕叫,我想隨着循環的進行更新的表。我在那裏只會在循環結束時顯示更新的表格。

+0

你是否支持IE瀏覽器? – user113716 2011-02-28 00:04:05

+0

不需要IE,這只是一個副項目。 – 2011-02-28 00:11:30

+1

好的,那麼只需注意另一件事。通過在循環中執行'.innerHTML + ='​​...'',每次迭代中您所做的就是獲取表格內容的HTML字符串表示形式,向其中添加一行,然後覆蓋所有基於內容的內容在新的字符串上。因此,基本上在每次迭代中,您都要銷燬所有以前創建的元素,並重新創建所有元素並再添加一行。這*非常昂貴。只是FYI。 :O) – user113716 2011-02-28 00:23:38

回答

3

不,這是不可能的。

您需要做的是分割部分循環,並在更新文檔後使用window.setTimeout繼續下一部分。

例子:

function longloop(){ 
    function work(i) { 
    x = someLengthyFunction(); 
    document.getElementById('aTable').innerHTML+='<tr><td>' + x + '</td></tr>'; 
    i++; 
    if (i < 100) window.setTimeout(function(){ work(i); }, 0); 
    } 
    work(0); 
} 
1

這絕對是web workers的工作。您可以將上述腳本作爲工作人員運行,以定期傳遞消息來更新您的內容。但是由於只有非常現代的瀏覽器才能利用網絡工作者,並且JavaScript不是線程語言,所以您可能必須非常創造性地編寫該循環才能完成此操作。

相關問題