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源码不错的工具
Dec 26 Javascript
解析ScrollPic在ie8下只滚动一遍,然后变为空白 ie6,ie7,chrome,firefox正常
Jun 26 Javascript
JavaScript匿名函数与委托使用示例
Jul 22 Javascript
jQuery中trigger()方法用法实例
Jan 19 Javascript
详解AngularJS的通信机制
Jun 18 Javascript
实例浅析js的this
Dec 11 Javascript
微信小程序页面间通信的5种方式
Mar 31 Javascript
ionic实现下拉刷新载入数据功能
May 11 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
Aug 31 Javascript
Vue开发之封装上传文件组件与用法示例
Apr 25 Javascript
小程序使用wxs解决wxml保留2位小数问题
Dec 13 Javascript
在Vue 中实现循环渲染多个相同echarts图表
Jul 20 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 数据库树的遍历方法
2009/02/06 PHP
PHP+ACCESS 文章管理程序代码
2010/06/21 PHP
PHP命令行脚本接收传入参数的三种方式
2014/08/20 PHP
PHP实现利用MySQL保存session的方法
2014/08/23 PHP
phalcon框架使用指南
2016/02/23 PHP
WordPress分页伪静态加html后缀
2016/06/08 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
JS运动框架之分享侧边栏动画实例
2015/03/03 Javascript
jQuery模拟新浪微博首页滚动效果的方法
2015/03/11 Javascript
JavaScript中利用Array和Object实现Map的方法
2015/07/27 Javascript
js+div实现文字滚动和图片切换效果代码
2015/08/27 Javascript
基于JavaScript如何制作遮罩层对话框
2016/01/26 Javascript
Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面
2016/07/01 Javascript
微信小程序开发之录音机 音频播放 动画实例 (真机可用)
2016/12/08 Javascript
Vue2.0 slot分发内容与props验证的方法
2017/12/12 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
2018/08/20 Javascript
详解React服务端渲染从入门到精通
2019/03/28 Javascript
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
2018/10/16 Python
Linux下安装python3.6和第三方库的教程详解
2018/11/09 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
Tensorflow 实现将图像与标签数据转化为tfRecord文件
2020/02/17 Python
python如何求100以内的素数
2020/05/27 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
2020/06/08 Python
python 爬取英雄联盟皮肤并下载的示例
2020/12/04 Python
HTML5实践-图片设置成灰度图
2012/11/12 HTML / CSS
ziaja齐叶雅官方海外旗舰店:来自波兰的天然护肤品牌
2017/01/02 全球购物
塔吉特百货公司官网:Target
2017/04/27 全球购物
Vita Fede官网:在意大利手工制作,在纽约市设计
2019/10/25 全球购物
驾驶员岗位职责
2014/01/29 职场文书
信息工作经验交流材料
2014/05/28 职场文书
师德先进个人材料
2014/12/20 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
美元符号 $
2022/02/17 杂记