2013-08-29 17 views
0

我正在學習w3schools的JavaScript,它講述了「如果在文檔加載完成後執行document.write,整個HTML頁面將被覆蓋」,並且我從例子中看到這確實發生了,但「我不明白是怎麼回事,並在網站上那種似乎跳過了解釋。我搬到周圍的腳本( 在javascript中的document.write,它是如何工作的?

<h1>My First Web Page</h1> 

<p>My First Paragraph</p> 

<button onclick="myFunction()">Try it</button> 

<script> 
function myFunction() 
{ 
document.write("Oops! The document disappeared!"); 
} 
</script> 

</body> 
</html> 

)的部分

要查看如果從腳本中的不同點加載不同的部分會改變效果,並且什麼也沒有發生。

在我繼續上課之前,我想知道真正發生了什麼,所以如果任何人甚至可以給我簡要的總結它的工作原理,我會很感激。

+0

避免'document.write',而是使用'document.createElement'動態內容添加到您的文檔,因爲它不會觸發的重分析DOM的文檔和再生 – Dai

+0

這裏完整說明:http://javascript.info/tutorial/document-write – CalebC

回答

0

發生什麼取決於您使用的瀏覽器。直到最近,您的代碼纔會將頁面替換爲所有瀏覽器中的文本,但最近在某些瀏覽器中實現已更改爲忽略document.write調用,而不是先隱式調用document.open,前提是尚未調用它。

在頁面加載完成後,仍然可以使用document.write替換所有瀏覽器中的頁面,但是必須以正確的方式進行,即先撥打document.open

+0

哦,好吧,這是有道理的。如何使用document.write它不覆蓋? (即我怎麼知道該文件已完成加載和如何避免它後,當它執行前/?(對不起,我只是一直在學習JavaScript的,因爲今天早上,所以我不知道很多。)) – user2727356

+0

@ user2727356 :如果您不想替換文檔,則只能在頁面加載時使用'document.write'。在頁面加載完成後,使用'innerHTML'屬性將內容放入元素中。 – Guffa

1

如果您一般熟悉編程,那麼您會知道stream s,它代表您可以連續讀取或寫入的內容,並且(通常)不會隨機訪問。

想象一下,document對象包含隱藏在其中的一個流,它表示來自包含HTML文本的Web服務器的原始文本響應。方法document.open()授予對此流的訪問權限。

加載頁面時(正如服務器的字節到達瀏覽器時),文檔流已經打開並且正在被讀取/寫入。當文檔完成加載時(即HTML本身,而不是外部資源,如<img />),流關閉。

...這就是爲什麼使用時document.write而頁面加載(即作爲<script>document.write("foo");</script>它插入文本「富」直接進入文檔流,而文件加載之後調用document.write導致流是(隱含的)從一開始,這會導致它被覆蓋重開。使用

相關問題