js中document.write的那点事


Posted in Javascript onDecember 12, 2014

记住,在载入页面后,浏览器输出流自动关闭。在此之后,任何一个对当前页面进行操作的document.write()方法将打开—个新的输出流,它将清除当前页面内容(包括源文档的任何变量或值)。因此,假如希望用脚本生成的HTML替换当前页面,就必须把HTML内容连接起来赋给一个变量,使用一个document.write()方法完成写操作。不必清除文档并打开一个新数据流,一个document.write()调用就可完成所有的操作。

关于document.write()方法还有一点要说明的是它的相关方法document.close()。脚本向窗口(不管是本窗口或其他窗口)写完内容后,必须关闭输出流。在延时脚本的最后一个document.write()方法后面,必须确保含有document.close()方法,不这样做就不能显示图像和表单。并且,任何后面调用的document.write()方法只会把内容追加到页面后,而不会清除现有内容来写入新值。为了演示document.write()方法,我们提供了同一个应用程序的两个版本。一个向包含脚本的文档中写内容,另—个向—个单独的窗口写内容。请在文本编辑器中键人每个文档,以.html文件扩展名保存,并在浏览器中打开文档。

示例1创建一个按钮,它为文档组合新的HTML内容,包括新文档标题的HTML标记和标记的颜色属性。示例中有一个读者所不熟悉的操作符+=,它把其右侧的字符串加到其左侧的变量中,这个变量用来存放字符串,这个操作符能很方便地把几个单独的语句组合成—个长字符串。使用组合在newContent变量中的内容,document.write()语句可以把所有新内容写到文档中,完全清除示例1中的内容。然后需要调用document.close()语句关闭输出流。当载入该文档并单击按钮时,可以注意到浏览器标题栏中的文档标题因此而改变。当回到原始文档并再次单击该按钮时,可以看到动态写入的第二个页面的载入速度甚至比重载原始文档还要快。

示例1 在当前窗口使用document.write()。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><title>Writing to Same Doc</title>
<script language="JavaScript">
 function reWrite(){
  // assemble content for new window
  var newContent = "<html><head><title>A New Doc</title></head>"
  newContent += "<body bgcolor='aqua'><h1>This document is brand new.</h1>"
  newContent += "Click the Back button to see original document."
  newContent += "</body></html>"
  // write HTML to new window document
  document.write(newContent)
  document.close() // close layout stream
 }
</script>
</head>
<body>
 <form>
  <input type="button" value="Replace Content" onClick="reWrite()">
 </form>
</body>
</html>

示例2中,情况有点复杂,因为脚本创建了一个子窗口,整个脚本生成的文档都将写入该窗口中。为了使新窗口的引用在两个函数中保持激活状态,我们将newWindow变量声明为全局变量。页面载入时,onLoad事件处理调用makeNewWindow()函数,该函数生成一个空的子窗口。另外,我们在window.open()方法的第三个参数中加入一个属性,使子窗口的状态栏可见。

页面上的按钮调用subWrite()方法,它执行的第一个任务是检查子窗口的closed属性。假如关闭了引用窗口,该属性(只在较新的浏览器版本中存在)返回true。如果是这种情况(假如用户手动关闭窗口),该函数再次调用makeNewWindow()函数来重新打开那个窗口。

窗口打开后,新的内容作为字符串变量组合在一起。与示例1一样,一次性写入内容(虽然对单独的窗口没有必要),接下来调用close()方法。但是注意一个重要的区别:write() 和 close()方法都明显地指定了子窗口。

示例2 在另一个窗口中使用document.write()

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><title>Writing to Subwindow</title>
<script language="JavaScript">
 var newWindow
 function makeNewWindow(){
  newWindow = window.open("","","status,height=200,width=300")
 }

 function subWrite(){
  // make new window if someone has closed it
  if(newWindow.closed){
   makeNewWindow()
  }
  // bring subwindow to front
  newWindow.focus()
  // assemble content for new window
  var newContent = "<html><head><title>A New Doc</title></head>"
  newContent += "<body bgcolor='coral'><h1>This document is brand new.</h1>"
  newContent += "</body></html>"
  // write HTML to new window document
  newWindow.document.write(newContent)
  newWindow.document.close()  // close layout stream
 }
</script>
</head>

<body onLoad="makeNewWindow()">
 <form>
  <input type="button" value="Write to Subwindow" onClick="subWrite()">
 </form>
</body>
</html>
Javascript 相关文章推荐
jquery监听div内容的变化具体实现思路
Nov 04 Javascript
jquery实现非叠加式的搜索框提示效果
Jan 07 Javascript
jquery ui bootstrap 实现自定义风格
Nov 14 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
Apr 06 Javascript
JavaScript SHA512&amp;SHA256加密算法详解
Aug 11 Javascript
js格式化时间的方法
Dec 18 Javascript
JavaScript优化以及前段开发小技巧
Feb 02 Javascript
vue.js开发实现全局调用的MessageBox组件实例代码
Nov 22 Javascript
200行代码实现blockchain 区块链实例详解
Mar 14 Javascript
vue-cli webpack 引入swiper的操作方法
Sep 15 Javascript
VUE搭建手机商城心得和遇到的坑
Feb 21 Javascript
基于jsbarcode 生成条形码并将生成的条码保存至本地+源码
Apr 27 Javascript
让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
Dec 12 #Javascript
jQuery实现瀑布流布局
Dec 12 #Javascript
jquery+ajax验证不通过也提交表单问题处理
Dec 12 #Javascript
js 左右悬浮对联广告代码示例
Dec 12 #Javascript
原生JavaScript+LESS实现瀑布流
Dec 12 #Javascript
jquery禁止回车触发表单提交
Dec 12 #Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
Dec 12 #Javascript
You might like
PHP var_dump遍历对象属性的函数与应用代码
2010/06/04 PHP
php URL跳转代码 减少外链
2011/06/25 PHP
PHP+Memcache实现wordpress访问总数统计(非插件)
2014/07/04 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
2014/12/16 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
2015/02/10 PHP
php实现源代码加密的方法
2015/07/11 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
php中final关键字用法分析
2016/12/07 PHP
php curl操作API接口类完整示例
2019/05/21 PHP
关于laravel后台模板laravel-admin select框的使用详解
2019/10/03 PHP
用JavaScript实现单继承和多继承的简单方法
2009/03/29 Javascript
JS根据生日算年龄的方法
2015/05/05 Javascript
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
js实现数组和对象的深浅拷贝
2017/09/30 Javascript
详解Vue中的scoped及穿透方法
2019/04/18 Javascript
javascript获取select值的方法完整实例
2019/06/20 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
JavaScript 实现继承的几种方式
2021/02/19 Javascript
[02:42]2014DOTA2国际邀请赛 三冰专访:我会打到Ti20
2014/07/13 DOTA
[02:37]2018DOTA2亚洲邀请赛赛前采访 VP.no[o]ne心中最强SOLO是谁
2018/04/04 DOTA
用Python中的wxPython实现最基本的浏览器功能
2015/04/14 Python
Python的MongoDB模块PyMongo操作方法集锦
2016/01/05 Python
python数据结构之链表的实例讲解
2017/07/25 Python
用python生成1000个txt文件的方法
2018/10/25 Python
Python中使用logging和traceback模块记录日志和跟踪异常
2019/04/09 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
2020/09/01 Python
计算机应用职专应届生求职信
2013/11/12 职场文书
英文简历自荐信范文
2013/12/11 职场文书
工作岗位说明书模板
2014/05/09 职场文书
个人工作表现评价材料
2014/09/21 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
事业单位岗位说明书
2015/10/08 职场文书
SpringBoot实现异步事件驱动的方法
2021/06/28 Java/Android
深入解析MySQL索引数据结构
2021/10/16 MySQL