2010-07-13 50 views
3

認爲劇本..javascript - document.write錯誤?

<html> 
<head> 
    <script type="text/javascript"> 
     document.write('TEST'); 
    </script> 
</head> 

<body> 
    Some body content ... 
</body> 

</html> 

能正常工作和單詞 'TEST' 被添加到<body>

但是當使用

<script type="text/javascript"> 
    window.onload = function(){ 
     document.write('TEST'); 
    } 
</script> 

,那麼主體內容是完全替換爲「測試」一詞,即刪除舊的內容,只添加「測試」一詞。

這種情況僅在document.writewindow.onload功能

我在Chrome嘗試這種內調用。我有沒有犯過錯誤?有什麼建議麼 ?

回答

9

document.write()如果在文檔完成分析並關閉後使用它,則不穩定。這種行爲是不可預知的跨瀏覽器,你根本不應該使用它。改爲使用innerHTMLcreateElement/createTextNode來操作DOM。

Mozilla documentation

書面形式向已加載無需調用document.open()會自動執行document.open調用的文件。一旦你完成了寫作,建議調用document.close(),告訴瀏覽器完成加載頁面。你寫的文本被解析成文檔的結構模型。在上面的例子中,h1元素成爲文檔中的一個節點。

如果document.write()調用直接嵌入到HTML代碼中,那麼它將不會調用document.open()。

等效的DOM代碼將是:

window.onload = function(){ 
    var tNode = document.createTextNode("TEST"); 
    document.body.appendChild(tNode); 
} 
1
    在第一種情況下
  1. 字不是寫在身體..它是寫在頭
  2. 的第一個作品,因爲該文檔仍然可以寫入。一旦完成(DOM加載),文檔關閉,並通過嘗試寫入它來替換它。
0

當文檔被滿載時,任何進一步調用document.write()都會覆蓋文檔內容。在致電document.write()之前,您必須使用document.close()以避免覆蓋。

0

首先創建一個元素,例如div,然後用window.onload事件向div添加內容。

document.write('<div id="afterpostcontent"><\/div>'); 
window.onload = function() 
{ 
    document.getElementById('afterpostcontent').innerHTML = '<span>TEST<\/span>'; 
} 

您可以使用此內容創建一個外部JavaScript文件並調用它的任何地方,例如:

<script src="afterpostcontentcode.js"></script>