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 相关文章推荐
jQuery操作JSON的CRUD用法实例
Feb 25 Javascript
深入理解JavaScript系列(49):Function模式(上篇)
Mar 04 Javascript
在JavaScript中处理字符串之link()方法的使用
Jun 08 Javascript
JS实现先显示大图后自动收起显示小图的广告代码
Sep 04 Javascript
给before和after伪元素设置js效果的方法
Dec 04 Javascript
jQuery滚动加载图片实现原理
Dec 14 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
Oct 18 Javascript
JavaScript无阻塞加载和defer、async详解
Feb 26 Javascript
AngularJS $http模块POST请求实现
Apr 08 Javascript
微信小程序之电影影评小程序制作代码
Aug 03 Javascript
vue+swiper实现组件化开发的实例代码
Oct 26 Javascript
vue全局使用axios的操作
Sep 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 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
2012/10/05 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
2014/04/10 PHP
php+ajax实现无刷新数据分页的办法
2015/11/02 PHP
修复ShopNC使用QQ 互联时提示100010 错误
2015/11/08 PHP
学习ExtJS Window常用方法
2009/10/07 Javascript
javascript中length属性的探索
2011/07/31 Javascript
js动态拼接正则表达式的两种方法
2014/03/04 Javascript
js设置document.domain实现跨域的注意点分析
2015/05/21 Javascript
js判断移动端是否安装某款app的多种方法
2015/12/18 Javascript
解析javascript图片懒加载与预加载的分析总结
2016/10/27 Javascript
js多个物体运动功能实例分析
2016/12/20 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
canvas实现弧形可拖动进度条效果
2017/05/11 Javascript
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
深入理解vuex2.0 之 modules
2017/11/20 Javascript
JavaScript 中使用 Generator的方法
2017/12/29 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
小程序tab页无法传递参数的方法
2018/08/03 Javascript
elementUI table表格动态合并的示例代码
2019/05/15 Javascript
基于layui的table插件进行复选框联动功能的实现方法
2019/09/19 Javascript
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
[42:00]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第一场 12.13
2020/12/17 DOTA
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
python 自动重连wifi windows的方法
2018/12/18 Python
Python使用微信接入图灵机器人过程解析
2019/11/04 Python
基于python判断目录或者文件代码实例
2019/11/29 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
2分钟教你实现环形/扇形菜单(基础版)
2020/01/15 HTML / CSS
深圳-东方伟业笔试部分
2015/02/11 面试题
2015年护士节慰问信
2015/03/23 职场文书
2015年幼儿园后勤工作总结
2015/04/25 职场文书
2019升学宴主持词范本5篇
2019/10/09 职场文书
如何解决.cuda()加载用时很长的问题
2021/05/24 Python
漫画「请问您今天要来点兔子吗?」最新杂志彩页公开
2022/03/24 日漫
阿里云日志过滤器配置日志服务
2022/04/09 Servers