2010-07-13 42 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>