javascript - document.write错误?

时间:2010-07-13 10:46:54

标签: javascript function window onload

考虑脚本..

<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>
使用

,然后将主体内容完全替换为“TEST”,即删除旧的主体内容,并且仅添加“TEST”一词。

只有在document.write函数

中调用window.onload时才会发生这种情况

我在chrome中试过这个。我有什么错误吗?有什么建议吗?

4 个答案:

答案 0 :(得分: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)

  1. 在第一种情况下,这个词没有写在正文中......它写在脑袋里
  2. 第一个是有效的,因为文档仍然可以写入...一旦它完成(加载了DOM)文档被关闭,并且通过尝试写入它来替换它..

答案 2 :(得分:0)

当文档已满载时,对document.write()的任何进一步调用都将覆盖文档内容。在致电document.close()之前,您必须先使用document.write()以避免覆盖。

答案 3 :(得分: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>