標籤:
有時候使用javascript 中的document.write()函數,會將原來的html全部清除,然後寫上新內容,但有時候不會
於是這種情況什麼時候會出現呢?我搜了下:
http://www.blogjava.net/JAVA-HE/archive/2008/11/25/242420.html
沒太看懂,以後繼續看
---- 又搜到一個
write 方法用於向文檔流中寫入內容。當文檔在載入的時候,文檔流是可寫的,所以就不用調用open(),close()方法來開啟和關閉輸出資料流。當文檔載入完畢過後,文檔流是不可寫的,要write內容就得先開啟輸出資料流,通過調用open()開啟,這個open()方法則會清除當前文檔(通常open()方法會在調用write時自動調用)。所以第一個問題:不是<p>html標籤</p>無法載入,是清除了;同樣的樣式也清除了,當然你也得不head裡的樣式。
第二個問題:文檔從上而上載入渲染,當遇到window.onload=pri(),此時前面的樣式、<p>..</p>等都分析完成。這時就要解析這句話window.onload=pri()。要往window.onload事件上綁定一個函數,而=號的右邊又不是一個函數而是一個函數的傳回值。所以就得先執行這個資料,得到傳回值,再綁定給window.onload。執行pri(),把write裡的東西寫到文檔裡,由於這時文檔還是處於載入渲染的階段,所以不會清除當前文檔,而是加文檔裡加入內容,你加入的div和原來body裡的div疊在一起了。這時pri()執行完了,而window.onload還期待pri()返回一個綁定函數,pri()沒有明確的返回語句也就預設返回undefined,而undefined和window.onload的綁定類型不對,所以會報錯。 至於你的樣式,你用write寫的div會用自己的style裡的樣式和#apDiv1裡的樣式一起計算,得到最後的樣式。你兩個div最後計算出來的樣式都一樣,所你看不出來差異(你可以試著把style裡的width減小就會看出來)。style屬性只能取得內聯裡的樣式結果,要得到<style></style>裡的和外部樣式(準確的說是計算樣式),得用另外的東西currentStyel、getComputedStyle。至於為什麼,東西太多這裡就不說了
(http://topic.csdn.net/u/20110524/18/3848a3cb-c05a-4f82-8ee1-dee2bbe09ce1.html)
總結by me:
頁面還在載入時。文檔流可寫。不需要調用open(),close()方法來開啟和關閉輸出資料流 --追加
當頁面載入完(window.onload),document.write() --調用document.open() document.close() --重寫
document.write()