为什么在Javascript中使用document.write
通常不被视为好习惯?我知道这不是最优雅或最好的方式,但它有任何真正的错误吗?好吗?在什么情况下它会比inner.HTML
据我所知,如果在加载后使用,它将重写文档。但是,即使我正在尝试重写文档,我应该使用innerHTML
吗?如果是这样,为什么?
我知道有人问过我在发布之前是否看过相关问题;我做到了。但我没有找到任何令人满意的东西。
答案 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我们在div
和span
元素中编写这些信息,因为它们位于html布局的正确位置。正如这些家伙所说,document.write
不适用于xhtml。