document. write会清空页面原因分析

探讨JavaScript中document.write在不同场景下导致页面覆盖的原因,及如何避免此现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不知道睿智优快云又抽什么疯,标题document.write竟然说是非法字符,害得我只能换成句号

在看JS教程的时候,有这样一个例子

<!DOCTYPE html>
<html>
<body>

<h1>My First Web Page</h1>

<p>My First Paragraph.</p>

<button onclick="myFunction()">点击这里</button>

<script>
function myFunction()
{
document.write("糟糕!文档消失了。");
}
</script>

</body>
</html>

界面是这样的
在这里插入图片描述
点击按钮之后,页面被清空了
在这里插入图片描述

但是如果我不是用函数,而是直接这样输出的话,就不会有覆盖的效果,而是把这句话打印在页面后面


<script>
document.write("糟糕!文档消失了。");
</script>

网上看了一些资料,发现用onload或函数点击事件调用,都会产生清空覆盖页面的现象
个人理解:
当使用document.write的时候,如果当前的文档流已经被关闭,那就会新创建一个文档流执行document.write语句,同时也就覆盖了之前的页面。onload是在文档加载完毕后再去执行的,文档流就已经是加载完毕的了,而按钮点击事件,也是在文档加载完毕后点击触发的。
这两种情况都是在文档流关闭以后执行的,而这个时候执行document.write()就会自动调用document.open()函数创建一个新的文档流,并写入新的内容,再通过浏览器展现,这样就会覆盖原来的内容。
不用onload或按钮点击而是直接把document.write()写在代码里的话,执行这句的时候文档流还未关闭,所以不需要新创建文档流,就不会覆盖了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值