You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使document.write()不追加文本?前端技术实现问询

解决document.write()追加内容而非覆盖的问题

这个问题我之前也碰到过,本质是因为document.write()的行为在文档加载完成前后有差异:

  • 第一次打开新窗口时,文档还处于未完成加载的状态,此时调用document.write()会直接写入内容并构建文档;
  • 但当窗口已经存在且文档加载完成后,再调用document.write()就会默认在现有文档的末尾追加内容,因为此时文档流已经关闭了。

下面给你两种简单有效的解决方法:

方法1:先打开文档流再写入(兼容传统场景)

在写入新内容前,先调用document.open()重新打开文档流,写完后调用document.close()关闭流,这样就能覆盖原有内容。修改后的代码如下:

<script>
function makeWindow() {
  var result = window.open("", "Result", "width=600,height=600");
  // 先打开文档流,再写入,最后关闭
  result.document.open();
  result.document.write(document.getElementById("txt").value);
  result.document.close();
}
</script>
<textarea id="txt"></textarea>
<br>
<button onClick="makeWindow();">Click</button>

方法2:直接修改DOM内容(更推荐)

相比操作文档流,直接修改目标窗口的innerHTML会更直观,也不需要处理文档流的打开/关闭逻辑,代码更简洁:

<script>
function makeWindow() {
  var result = window.open("", "Result", "width=600,height=600");
  // 直接替换body的内容
  result.document.body.innerHTML = document.getElementById("txt").value;
}
</script>
<textarea id="txt"></textarea>
<br>
<button onClick="makeWindow();">Click</button>

两种方法都能实现点击按钮时,新窗口的内容被完全覆盖而不是追加,你可以根据自己的习惯选择~

内容的提问来源于stack exchange,提问作者CookiePanda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:30:34