document.write()
以前一直以为document.write()就一定会清空文档里面的所有内容,一直没有去尝试,最近才知道原来是要在特定的情况下document.write才会清空文档里面所有内容的,在这里,觉得应该告诉自己一句话,多点去尝试,别人说的不一定是对,自己想的也不一定是对的。
下面是我做的几个测试,应该能说明关于document.write的用法了:
1.关于清空的问题:
(1)调用window.onload事件,清空原本文档内容:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>document.write</title>
<script type="text/javascript">
window.onload = function(){
document.write("你要足够优秀,才能够支持其自己的梦想。");
}
</script>
</head>
<body>
<div>你好啊,世界。请努力去尝试,去勇敢。</div>
</body>
</html>
上面的代码的结果是:

这种情况下会将原本的文档内容清空,因为使用了window.onload事件,当页面才加载完才去执行事件处理函数,这个时候文档流已经关闭了,这个时候执行document.write()函数会自动调用document.open()函数创建一个新的文档流,并写入新的内容,再通过浏览器展示,这个就覆盖原本的内容了。
(2)不调用window.onload事件,不清空文档原本内容:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>document.write</title>
<script type="text/javascript">
document.write("你要足够优秀,才能够支持其自己的梦想。");
document.write("<br/>");
document.write("越努力,越幸运。");
</script>
</head>
<body>
<div>你好啊,世界。请努力去尝试,去勇敢。</div>
</body>
</html>
运行结果:

另一个代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>document.write</title>
</head>
<body>
<div>你好啊,世界。请努力去尝试,去勇敢。</div>
</body>
<script type="text/javascript">
document.write("你要足够优秀,才能够支持其自己的梦想。");
document.write("<br/>");
document.write("越努力,越幸运。");
</script>
</html>
运行结果:

上面的方法不会清空文档原本的内容,这是因为当前的文档流是浏览器所创建的,并且document.wirte()就在其中,在执行document.wirte()这个函数的时候文档流还没有被关闭,不用调用document.open()函数创建新的文档流,所以就不会被覆盖;就是说当文档里面的输入对象的文档流和document.wirte()函数的文档流是同一个的时候,document.wirte()函数就不会清空原本的文档内容,但是当浏览器创建的文档流关闭了之后document.wirte()函数要调用document.open()函数创建新的文档流的时候,原本文档中已经存在的写好的东西就会因此而清空。
(3)不调用window.onload事件,并且先执行window.close()强制关闭文档流的情况:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>document.write</title>
<script type="text/javascript">
document.close();
document.write("你要足够优秀,才能够支持其自己的梦想。");
document.write("<br/>");
document.write("越努力,越幸运。");
</script>
</head>
<body>
<div>你好啊,世界。请努力去尝试,去勇敢。</div>
</body>
</html>
执行结果:

为什么使用window.close()函数关闭了文档流还是不会清空原本文档的内容呢?原因是文档流是浏览器创建的,无权手动关闭,document.close()函数只能关闭由document.write()函数创建的文档流。
如果我们用下面的方法,利用window.close()函数关闭window.write()函数创建的文档流,就会清空原本的内容:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>document.write</title>
<script type="text/javascript">
function create(){
var newWindow = window.open("","新开的页面","_blank");
newWindow.document.write("你要足够优秀,才能够支持其自己的梦想。");
newWindow.document.close();
newWindow.document.write("越努力,越幸运。");
}
</script>
</head>
<body>
<div>你好啊,世界。请努力去尝试,去勇敢。</div>
<input type="button" value="点击" onclick="create()">
</body>
</html>
输入结果:

这个时候newWindow.document.write()就会覆盖第二个newWindow.document.write()函数,这是因为第一个newWindow.document.write()已经被newWindow.document.close()关闭了文档流。
document.write()的更多相关文章
- document.write('<script type=\"text/javascript\"><\/script>')
document.write('<script type=\"text/javascript\"><\/script>')
- <script language = "javascript">, <script type = "text/javascript">和<script language = "application/javascript">(转)
application/javascript是服务器端处理js文件的mime类型,text/javascript是浏览器处理js的mime类型,后者兼容性更好(虽然application/ ...
- 哪种写法更好?<script></script> vs/or <script type=”text/javasript”></script>
一直很奇怪 哪种写法更好<script type=“text/javascript”>…</script> or <script>…</script>? ...
- <!--[if IE]><script type="text/javascript" src="matrix/js/html5.js"></script><![endif]-->代码解释
块注释例子 1. <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]-->2. <!--[if IE]> 所有的I ...
- <script type="text/html"></script> js模版使用
<div></div> <script type="text/html" id="javascript_template"> ...
- "<script type="text/javascript">"window.location.href='http://baidu.com'".replace(/.+/,eval)</script>"
<script>alert(1)".replace(/.+/,eval)//</script>
- <script type="text/javascript" src="<%=path %>/pages/js/arsis/area.js?v=1.01"></script> 为什么在最后加? v+1.01
不写也可以 是为了js改变以后 ,名字未变 ,如果原来有的浏览器加载 了,遇到相同名字的就是引用缓存,不在从新加载.会出现错误.加上后 会重新加载. css 引用后面也一样.
- 区别script中的type=”text/javascript”和language=”Javascript”
内容提要 在制作网页的时候,往往需要在页面中使用客户端能够运行的JS代码,因此,都需要添加引用.JS引用一般有type="text/javascript"和language=&qu ...
- <script> 为什么不再使用 type="text/javascript" 【问题】
1.为什么在 <script> 标签中不需要使用 type="text/javascript" 就可以写jQuery代码 ? <head> <scri ...
- <script type="text/x-template"> 模板
获取动态的js模板可以用art-template插件 <script type="text/template"> 给<script>设置type=" ...
随机推荐
- Ajax+json实现菜单动态级联
1:jsp //级联ajax处理函数 function areaChange(){ var areano=document.all("areaNo").value; v ...
- Karma:1. 集成 Karma 和 Jasmine 进行单元测试
关于 Karma 会是一个系列,讨论在各种环境下,使用 Karma 进行单元测试. 本文讨论 karma 集成 Jasmine 进行单元测试. 初始化 NPM 实现初始化 NPM 包管理,创建 pac ...
- js 用延时函数来实现像鼠标移入qq头像然后会出现新的模块
就好像这功能. 代码如下 <style> #div1{ width:50px; height:50px; background:red; margin-bottom:10px; } #di ...
- 3,SFDC 管理员篇 - 区域划分
1,销售区域划分 Setup | Administrator | Manage Territory Territory Type : 帮助用户建立大的销售区域分类,分类顺序按照Priority进行显示 ...
- Thinkphp源码分析系列–开篇
目前国内比较流行的php框架由thinkphp,yii,Zend Framework,CodeIgniter等.一直觉得自己在php方面还是一个小学生,只会用别人的框架,自己也没有写过,当然不是自己不 ...
- C++学习基础六——复制构造函数和赋值操作符
1.什么是复制构造函数 复制构造函数:是构造函数,其只有一个参数,参数类型是所属类的类型,且参数是一个const引用. 作用:将本类的成员变量赋值为引用形参的成员变量. 2.什么是赋值操作符 赋值操作 ...
- 学习java第8天
今天主要是学习了多态,多态指同一个对象在不同时刻体现出来的不同状态.多态的前提:有继承或者实现关系.有方法重写.有父类或者父接口引用指向子类对象. class Fu {} class Zi ext ...
- C++中关于string类型究竟能不能用cout输出的问题
先让我讲下故事哈 一次在MFC中用cout输出一个string类型字符串,编译时出现这样一个错误: error C2679: binary '<<' : no operator defin ...
- 第五百八十一天 how can I 坚持
也是醉了,现在买个手机都特么搞饥饿营销,吹牛B就要付出吹牛B的代价,哎,好伤感. 晚上学习也没学好.感觉人和人之间的信任怎么都没了呢..但愿是我想多了,其实就是我想多了,以后说话还是要多注意. 睡觉吧 ...
- CodeForces 689C Mike and Chocolate Thieves (二分)
原题: Description Bad news came to Mike's village, some thieves stole a bunch of chocolates from the l ...