js

javaScript之document.write()

Posted by hebicheng on May 6, 2018

定义和用法

document.write() 方法可向文档写入 HTML 表达式或 JavaScript 代码。
可列出多个参数(exp1,exp2,exp3,…) ,它们将按顺序被追加到文档中。

说明

虽然根据 DOM 标准,该方法只接受单个字符串作为参数。不过根据经验,write() 可接受任何多个参数。 我们通常按照两种的方式使用 write() 方法:一是在使用该方在文档中输出 HTML,另一种是在调用该方法的的窗口之外的窗口、框架中产生新文档。在第二种情况中,请务必使用 close() 方法来关闭文档。

例:

<html>
<body>
<script type="text/javascript">
    document.write("Hello World!");
</script>
</body>
</html>

document.write()清空原内容

很多人遇到过这样类似的情况,document.write方法向网页写内容的时候,会把文档中的原来的内容清空。那么什么时候会被清空什么时候又不会被清空呢?我们来看下面几个例子。

  • 例一
<html>      
<head>      
<script>  
    window.onload=function(){
        document.write("content 2");
    }
</script> 
</head>  
<body>  
<div>content 1</div> 
</body>  
</html>

显示:

1
content 2

在这个例子中,页面会显示”content 2“,这是因为window.onload事件是在文档内容完全加载完毕触发,当然文档流已经关闭,这个时候执行doucment.write方法会自动调用document.open方法创建一个新的文档流,并写入新的内容,再通过浏览器展现,这样就会覆盖原来的内容。

我们再看下一个例子。

  • 例二
<html>      
<head>      
<script>  
    document.write("content 2");
</script> 
</head>  
<body>  
<div>content 1</div> 
</body>  
</html>

显示:

1
2
content 2
content 1

这个例子中,原来的文档内容”content 1“并没有被清空,因为当前文档流是由浏览器所创建,并且document.wirte方法身处其中,也就是执行此方法的时候文档流并没有被关闭,这个时候不会调用document.open方法创建新文档流,所以也就不会被覆盖。

  • 例三
<html>      
<head>      
<script>  
    document.close(); 
    document.write("content 2");
</script> 
</head>  
<body>  
<div>content 1</div> 
</body>  
</html>

显示:

1
2
content 2
content 1

这个例子中,发现原来的文档内容”content 1“还是没有被清空,我们使用document.close关闭了文档流,为什么还是不能覆盖原来的内容呢,因为文档流是由浏览器创建,无权限手动关闭,document.close方法只能够关闭由document.open方法创建的文档流。

  • 例四
<html>      
<head>      
<script>  
    function func(){
        document.write("content 1");
        document.close();
        document.write("content 2");
    }
</script> 
</head>  
<body>  
<button onclick="func()">Try it</button>
</body>  
</html>

显示:

1
content 2  

这个例子中,便能达到我们预期的效果,调用document.close()后,原文档内容被清空,显示新的内容。

参考资料

HTML DOM write() 方法
http://www.softwhy.com/article-8326-1.html

javaScript之document.write()
原创作品,转载请注明来源 https://hebicheng.github.io