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 相关文章推荐
javascript获得服务器端控件的ID的实现代码
Dec 28 Javascript
jQuery中:checked选择器用法实例
Jan 04 Javascript
利用Angularjs和原生JS分别实现动态效果的输入框
Sep 01 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
Nov 21 Javascript
原生js实现无限循环轮播图效果
Jan 20 Javascript
JavaScript判断变量名是否存在数组中的实例
Dec 28 Javascript
使用vue-cli编写vue插件的方法
Feb 26 Javascript
element-ui表格列金额显示两位小数的方法
Aug 24 Javascript
VeeValidate 的使用场景以及配置详解
Jan 11 Javascript
vue中v-text / v-html使用实例代码详解
Apr 02 Javascript
小程序云开发获取不到数据库记录的解决方法
May 18 Javascript
Vue拖拽组件列表实现动态页面配置功能
Jun 17 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
全国FM电台频率大全 - 5 内蒙古自治区
2020/03/11 无线电
php 判断字符串中是否包含html标签
2014/02/17 PHP
PHP获取文件扩展名的4种方法
2015/11/24 PHP
浅谈PHP链表数据结构(单链表)
2016/06/08 PHP
yii2安装详细流程
2018/05/23 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
jquery中实现标签切换效果的代码
2011/03/01 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
2014/12/17 Javascript
javascript 动态创建表格
2015/01/08 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
2017/02/14 Javascript
Vue导出json数据到Excel电子表格的示例
2017/12/04 Javascript
小程序图片长按识别功能的实现方法
2018/08/30 Javascript
angularJs中orderBy筛选以及filter过滤数据的方法
2018/09/30 Javascript
详解小程序中h5页面onShow实现及跨页面通信方案
2019/05/30 Javascript
扫微信小程序码实现网站登陆实现解析
2019/08/20 Javascript
深入理解redux之compose的具体应用
2020/01/12 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
JavaScript实现tab栏切换效果
2020/03/16 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
2020/04/30 Javascript
简单了解常用的JavaScript 库
2020/07/16 Javascript
Python设计模式之MVC模式简单示例
2018/01/10 Python
Python中整数的缓存机制讲解
2019/02/16 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
Python 之 Json序列化嵌套类方式
2020/02/27 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
html5读取本地文件示例代码
2014/04/22 HTML / CSS
国际旅客访问北美最大的汽车租赁提供商:Alamo Rent A Car
2018/06/13 全球购物
瑞士网球商店:Tennis-Point
2020/03/12 全球购物
冬季安全检查方案
2014/05/23 职场文书
幼儿园标语大全
2014/06/19 职场文书
防灾减灾活动总结
2014/08/30 职场文书
党的群众路线教育实践活动督导组工作情况汇报
2014/10/28 职场文书
2014年社区工会工作总结
2014/12/18 职场文书
高中16字霸气押韵班级口号集锦!
2019/06/27 职场文书
django上传文件的三种方式
2021/04/29 Python
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers