JS 中document.write()的用法和清空的原因浅析


Posted in Javascript onDecember 04, 2017

可能很多朋友都遇到过这样的情况,那就是使用document.write()函数向网页中写内容的时候,会把文档中的原来的内容给清空,这一点对于初学者来说算是一个困扰,下面就介绍一下为什么会出现这种情况,当然也就知道如何避免此种情况的发生了。

先看一段代码实例:

<!DOCTYPE html>   
<html>   
  <head>   
  <meta charset=" utf-8">      
  <title>Document</title>   
  <script type="text/javascript"> 
    window.onload=function(){
      document.write("重温 JavaScript");
    }
  </script> 
</head> 
<body> 
  <div>Hello JavaScript</div> 
</body> 
</html>

从以上代码的可以看出document.write()函数将原来的文档内容清空了,下面介绍一下出现此种情况的原因:

window.onload事件是在文档内容完全加载完毕再去执行事件处理函数,当然文档流已经关闭了,这个时候执行doucment.writ()函数会自动调用document.open()函数创建一个新的文档流,并写入新的内容,再通过浏览器展现,这样就会覆盖原来的内容。不过很多朋友还有会这样的疑问,为什么类似下面的情况,原来网页中的内容不会被覆盖,代码如下:

<!DOCTYPE html>   
<html>   
  <head>   
  <meta charset=" utf-8">     
  <title>Document</title>   
  <script type="text/javascript"> 
    document.write("重温 JavaScript");
  </script> 
</head> 
<body> 
  <div>Hello JavaScript</div> 
</body> 
</html>

在以上代码中,原来的文档内容并没有被清空,这是因为当前文档流是由浏览器所创建,并且document.wirte()函数身处其中,也就是执行此函数的时候文档流并没有被关闭,这个时候不会调用document.open()函数创建新文档流,所以也就不会被覆盖了。可能还有朋友会问为什么下面的方式还是不行,代码如下:

<!DOCTYPE html>   
<html>   
<head>   
  <meta charset=" utf-8">     
  <title>Document</title>   
  <script type="text/javascript">
    document.close(); 
    document.write("重温 JavaScript");
  </script> 
</head> 
<body> 
  <div>Hello JavaScript</div> 
</body> 
</html>

上面使用document.close()关闭文档流了,为什么还是不能够覆盖原来的内容的,很遗憾,文档流是由浏览器创建,无权限手动关闭,document.close()函数只能够关闭由document.open()函数创建的文档流。看下面的代码实例:

<!DOCTYPE html>    
<html>    
<head>    
  <meta charset=" utf-8">      
  <title>Document</title>   
  <script type="text/javascript">  
  function create(){ 
    var newWindow=window.open("","Document","_blank"); 
    newWindow.document.write("Hello JavaScript"); 
    newWindow.document.close(); 
    newWindow.document.write("覆盖后的输出"); 
  } 
  window.onload=function(){ 
    var obt=document.getElementById("bt"); 
    obt.onclick=function(){ 
      create(); 
    } 
  } 
</script> 
</head>  
<body>  
  <div id="print">Hello JavaScript</div> 
  <input type="button" id="bt" value="查看效果"/> 
</body>  
</html>

由doucment.open()创建的文档流就可以由document.close()关闭,那么第二个document.write()输出的内容会覆盖掉第一个输出的内容。

异步引用外部JavaScript时,必须先运行document.open()清空文档,然后才能运行document.write(),参数写在body内容的开头。

如果不先运行document.open(),直接运行document.write(),则无效且Chrome有如下提示:

JS 中document.write()的用法和清空的原因浅析

// asyncWrite.js
document.open();
document.write('<p>test</p>');
document.close();
<!-- asyncWrite.html -->
<!-- 运行前 -->
<body>
  <script src="asyncWrite.js" async></script>
</body>
<!-- 运行后 -->
<body>
  <p>test</p>
</body>

document.write()也能写入含有script标签的字符串,但是需要转义。写入的script标签中的内容会正常运行。

<!-- 运行前 -->
<script>
  document.write('<script>document.write("<p>test</p>");<\/script>');
</script>
<!-- 运行后 -->
<script>
  document.write('<script>document.write("<p>test</p>");<\/script>');
</script>
<script>document.write("<p>test</p>");</script>
<p>test</p>

document.write()可以传入多个参数。

<!-- 运行前 -->
<body>
  <script>
    document.write('<h2>multiArgument</h2>','<p>test</p>');
  </script>
</body>
<!-- 运行后 -->
<body>
  <script>
    document.write('<h2>multiArgument</h2>','<p>test</p>');
  </script>
  <h2>multiArgument</h2>
  <p>test</p>
</body>

总结

以上所述是小编给大家介绍的JS 中document.write()的用法和清空的原因浅析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
动态刷新 dorado树的js代码
Jun 12 Javascript
你必须知道的Javascript知识点之&quot;this指针&quot;的应用
Apr 23 Javascript
jQuery实现图片放大预览实现原理及代码
Sep 12 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
Apr 15 Javascript
一个简单的动态加载js和css的jquery代码
Sep 01 Javascript
js插件Jcrop自定义截取图片功能
Oct 14 Javascript
EditPlus中的正则表达式 实战(4)
Dec 15 Javascript
vue2.0 computed 计算list循环后累加值的实例
Mar 07 Javascript
基于ionic实现下拉刷新功能
May 10 Javascript
详解基于vue的服务端渲染框架NUXT
Jun 20 Javascript
vue项目环境变量配置的实现方法
Oct 12 Javascript
详解JavaScript函数callee、call、apply的区别
Mar 08 Javascript
JavaScript实现省市联动过程中bug的解决方法
Dec 04 #Javascript
浅谈 vue 中的 watcher
Dec 04 #Javascript
vue中的计算属性的使用和vue实例的方法示例
Dec 04 #Javascript
Vue导出json数据到Excel电子表格的示例
Dec 04 #Javascript
微信小程序tabBar用法实例详解
Dec 04 #Javascript
详解如何实现一个简单的Node.js脚手架
Dec 04 #Javascript
浅谈React和Redux的连接react-redux
Dec 04 #Javascript
You might like
PHP控制网页过期时间的代码
2008/09/28 PHP
PHP获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
PHP中的session永不过期的解决思路及实现方法分享
2011/04/20 PHP
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
微信网页授权(OAuth2.0) PHP 源码简单实现
2016/08/29 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
nodejs 后缀名判断限制代码
2011/03/31 NodeJs
js onload处理html页面加载之后的事件
2013/10/30 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
node.js中的fs.chmod方法使用说明
2014/12/18 Javascript
JS实现选项卡实例详解
2015/11/17 Javascript
基于zepto的移动端轻量级日期插件--date_picker
2016/03/04 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
2017/05/26 jQuery
JS 60秒后重新发送验证码的实例讲解
2017/07/26 Javascript
vuejs使用递归组件实现树形目录的方法
2017/09/30 Javascript
Javascript将图片的绝对路径转换为base64编码的方法
2018/01/11 Javascript
javascript实现摄像头拍照预览
2019/09/30 Javascript
js实现简单的贪吃蛇游戏
2020/04/23 Javascript
[02:03]永远的信仰DOTA2 中国军团历届国际邀请赛回顾
2016/06/26 DOTA
Python实现一个简单的MySQL类
2015/01/07 Python
用python实现对比两张图片的不同
2018/02/05 Python
对python中的for循环和range内置函数详解
2018/04/17 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
Python Numpy 实现交换两行和两列的方法
2019/06/26 Python
提升Python效率之使用循环机制代替递归函数
2019/07/23 Python
Python3.9.1中使用split()的处理方法(推荐)
2021/02/07 Python
AmazeUI的JS表单验证框架实战示例分享
2020/08/21 HTML / CSS
中国跨境电商:Tomtop
2017/03/16 全球购物
护士见习期自我鉴定
2014/02/08 职场文书
幼儿园教师获奖感言
2014/03/11 职场文书
人力资源管理专业毕业生自荐书
2014/05/25 职场文书
承诺书范本
2015/01/21 职场文书
人事任命通知书
2015/04/21 职场文书
校园之声广播稿
2015/08/18 职场文书
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技