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 相关文章推荐
php图像生成函数之间的区别分析
Dec 06 Javascript
利用Jquery实现可多选的下拉框
Feb 21 Javascript
纯JavaScript实现的分页插件实例
Jul 14 Javascript
vuex实现简易计数器
Oct 27 Javascript
Angularjs实现分页和分页算法的示例代码
Dec 23 Javascript
JS操作input标签属性checkbox全选的实现代码
Mar 02 Javascript
详解AngularJS2 Http服务
Jun 26 Javascript
React复制到剪贴板的示例代码
Aug 22 Javascript
vue2.0 实现富文本编辑器功能
May 26 Javascript
Vue中图片Src使用变量的方法
Oct 30 Javascript
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
Apr 17 Javascript
Vue通过Blob对象实现导出Excel功能示例代码
Jul 31 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
phpMyAdmin 安装及问题总结
2009/05/28 PHP
我的php学习笔记(毕业设计)
2012/02/21 PHP
类似CSDN图片切换效果脚本
2009/09/17 Javascript
原生javascript实现图片轮播效果代码
2010/09/03 Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
2013/01/23 Javascript
jquery获取tr中控件值并操作tr实现思路
2013/03/27 Javascript
javascript scrollTop正解使用方法
2013/11/14 Javascript
js中的如何定位固定层的位置
2014/06/15 Javascript
jQuery插件简单实现方法
2015/07/18 Javascript
基于jPlayer三分屏的制作方法
2016/12/21 Javascript
微信小程序页面间通信的5种方式
2017/03/31 Javascript
node.js中实现kindEditor图片上传功能的方法教程
2017/04/26 Javascript
bootstrap table表格插件使用详解
2017/05/08 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
垃圾回收器的相关知识点总结
2018/05/13 Javascript
Vue封装的组件全局注册并引用
2019/07/24 Javascript
Vue数据双向绑定底层实现原理
2019/11/22 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
前端深入理解Typescript泛型概念
2020/03/09 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
[06:16]第十四期-国士无双绝地翻盘之撼地神牛
2014/06/24 DOTA
Python 网页解析HTMLParse的实例详解
2017/08/10 Python
Python数据拟合与广义线性回归算法学习
2017/12/22 Python
python 实现批量xls文件转csv文件的方法
2018/10/23 Python
PyQt编程之如何在屏幕中央显示窗体的实例
2019/06/18 Python
python文档字符串(函数使用说明)使用详解
2019/07/30 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
解决TensorFlow调用Keras库函数存在的问题
2020/07/06 Python
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
个人实用简单的自我评价
2013/10/19 职场文书
入党积极分子自我鉴定范文
2014/03/25 职场文书
教师新年寄语
2014/04/03 职场文书
幼师求职自荐信
2014/05/31 职场文书
员工工作表现自我评价
2015/03/06 职场文书
员工升职自我评价
2019/03/26 职场文书