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 相关文章推荐
JS 建立对象的方法
Apr 21 Javascript
jquery提升性能最佳实践小结
Dec 06 Javascript
原生js实现跨浏览器获取鼠标按键的值
Apr 08 Javascript
基于javascript实现最简单的选项卡切换效果
May 16 Javascript
AngularJS表达式讲解及示例代码
Aug 16 Javascript
用Vue.js实现监听属性的变化
Nov 17 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
Feb 21 Javascript
JavaScript条件判断_动力节点Java学院整理
Jun 26 Javascript
基于JavaScript实现弹幕特效
Aug 27 Javascript
JavaScript实现数值自动增加动画
Dec 28 Javascript
基于Vue插入视频的2种方法小结
Apr 02 Javascript
vue自定义树状结构图的实现方法
Oct 18 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插入中文到sqlserver 2008里出现乱码的解决办法分享
2012/07/19 PHP
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
JS 控制非法字符的输入代码
2009/12/04 Javascript
javascript数字数组去重复项的实现代码
2010/12/30 Javascript
jQuery前台数据获取实现代码
2011/03/16 Javascript
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
jQuery截取指定长度字符串代码
2014/08/21 Javascript
javascript实现修改微信分享的标题内容等
2014/12/11 Javascript
JavaScript中数据结构与算法(二):队列
2015/06/19 Javascript
jQuery使用animate创建动画用法实例
2015/08/07 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
关于javascript的一些知识以及循环详解
2016/09/12 Javascript
Javascript的动态增加类的实现方法
2016/10/20 Javascript
jquery结合html实现中英文页面切换
2016/11/29 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
Express+Nodejs 下的登录拦截实现代码
2017/07/01 NodeJs
vue+mousemove实现鼠标拖动功能(拖动过快失效问题解决方法)
2018/08/24 Javascript
原生js检测页面加载完毕的实例
2018/09/11 Javascript
Vue.js 中的 v-show 指令及用法详解
2018/11/19 Javascript
ant-design-vue中tree增删改的操作方法
2020/11/03 Javascript
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
开始着手第一个Django项目
2015/07/15 Python
Python使用numpy实现BP神经网络
2018/03/10 Python
Python使用crontab模块设置和清除定时任务操作详解
2019/04/09 Python
Python Pandas实现数据分组求平均值并填充nan的示例
2019/07/04 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
python 实现Requests发送带cookies的请求
2021/02/08 Python
世界上最大的家庭自动化公司:Smarthome
2017/12/20 全球购物
商业融资计划书
2014/04/29 职场文书
2014年教师节红领巾广播稿
2014/09/10 职场文书
2014年班级工作总结
2014/11/14 职场文书
2015年妇幼卫生工作总结
2015/05/23 职场文书
公司处罚决定书
2015/06/24 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书
用python修改excel表某一列内容的操作方法
2021/06/11 Python