为什么不document.write?

时间:2013-09-13 14:46:18

标签: javascript

为什么在Javascript中使用document.write通常不被视为好习惯?我知道这不是最优雅或最好的方式,但它有任何真正的错误吗?好吗?在什么情况下它会比inner.HTML

更好

据我所知,如果在加载后使用,它将重写文档。但是,即使我正在尝试重写文档,我应该使用innerHTML吗?如果是这样,为什么?

我知道有人问过我在发布之前是否看过相关问题;我做到了。但我没有找到任何令人满意的东西。

6 个答案:

答案 0 :(得分:5)

正确使用 时,它很好,但使用非常有限。

can't use it in XHTML,但我建议不要使用XHTML,除非你有一个非常非常好的理由。

在初始页面加载完成后调用document.write时出现问题。 页面加载期间很好,但之后,它会导致隐式document.open,它会从窗口中清除文档并重新开始。

使用document.write也意味着您无法在脚本元素上请求加载脚本或使用async or defer属性。

最后,我通常建议将JavaScript放在文档最末端的单独(单个)JavaScript文件中(在结束</body>标记之前)。如果您想使用document.write输出到页面,则必须将该脚本文件包含在更高的位置或直接在HTML中使用代码,我建议不要同时使用这两种文件。

因为与其他方法相比,它的用途有限,所以最好熟练掌握其他方法。

答案 1 :(得分:2)

是的,在文档加载完成后调用document.write将擦除文档。启动控制台,并进行document.write("test")呼叫。该页面将被这个新内容覆盖。除了可以在一个步骤中设置iframe innerHTML之外,不要使用document.write

答案 2 :(得分:1)

一个原因可能是document.write在XHTML中不起作用

document.write仅在页面加载时有效;如果您在页面加载完成后调用它,它将覆盖整个页面,即在您的文档完全呈现并关闭后,使用document.write()将清除当前文档并开始一个新文档,消除所有以前的文档内容。

答案 3 :(得分:1)

来自the MDN

  

写入已经加载但未调用的文档   document.open()将自动执行document.open调用。一旦   你写完了,建议你调用document.close(),   告诉浏览器完成加载页面。你写的文字是   解析成文档的结构模型。在上面的例子中,   h1元素成为文档中的节点。

简而言之:必须在初始load之后执行的代码(例如在事件处理程序中)不能包含document.write或者它们会触发替换整个文档。

答案 4 :(得分:1)

因为它取代了整个文件。在99%的情况下,您只需要替换某些特定元素的内容。

document.write确实使用它 - 例如,当您需要将可执行脚本写入新创建的文档时。

答案 5 :(得分:1)

作为一个很好的实践,有时我们在客户端有信息并使用javascript我们在divspan元素中编写这些信息,因为它们位于html布局的正确位置。正如这些家伙所说,document.write不适用于xhtml。