document.write() 有什么错误吗?

Is there any bug with document.write()?

我的代码是这样的:

window.onload = function() {
    var x = document.createElement("INPUT");
    x.setAttribute("type", "text");
    x.setAttribute("value", "");
    document.body.appendChild(x);
}

我想再写点东西,我加了一行。

像这样:

window.onload = function() {
    var x = document.createElement("INPUT");
    x.setAttribute("type", "text");
    x.setAttribute("value", "");
    document.body.appendChild(x);
    document.write("<br>");
}

然后,我的输入标签突然消失了。

所以,我写了'AAA'来检查是否添加了<br>代码。

像这样:

window.onload = function() {
    var x = document.createElement("INPUT");
    x.setAttribute("type", "text");
    x.setAttribute("value", "");
    document.body.appendChild(x);

    document.write("<br>");
    document.write("AAA")
}

换行了,AAA。

因此,我认为 document.write().

存在错误或其他问题

有没有bug?

还是我写错了?

我的目的是添加一个新行。

我想使我的代码 运行 正确。

有什么办法可以解决这个问题吗?

问题是,如果页面已经加载,document.write替换 整个 页面HTML 字符串。如果您删除了 window.onload 处理程序,并在浏览器到达 <script> 标记时立即拥有该片段 运行,则 <input><br> 都将是按预期插入文档:

<script language="javascript">
  var x = document.createElement("INPUT");
  x.setAttribute("type", "text");
  x.setAttribute("value", "");
  document.body.appendChild(x);
  document.write("<br>");
</script>

一般来说,解决方案是使用document.write - 它的行为可能会令人困惑,并且它提供的任何东西都可以通过方法轻松完成例如appendChildinsertAdjacentHTML,例如:

document.body.appendChild(document.createElement('br'));

document.body.insertAdjacentHTML('beforeend', '<br>');