日期:2014-05-16  浏览次数:20355 次

{{JS}}document.write()方法详解
document.write()允许把内容写入到文档中。这个方法是0级DOM的一部分。使用document.write()有两种方式:
1)在脚本中使用它,把HTML输入到当前正在解析的文档中。但要注意只能在当前文档解析时使用document.write()方法向其输出HTML代码。即只能在标记<script>的顶层代码中调用方法document.write(),因为这些脚本的执行是文档解析过程的一部分。如果把一个document.write()调用放入到一个函数定义中,然后从一个事件句柄中调用document.write(),它不会像期望的那样工作;实际上,它会覆盖当前文档和它所包含的脚本()。

document.write()在一个HTML文档 中插入一个文本,该文档位于包含了这一方法调用的<script>标记处。如果一个<script>有一个defer属性,它就不能包含任何对document.write()的调用。defer告诉浏览器,把脚本的调用延迟到文档完全载入才是安全的。一旦发生这种情况,对document.write()在文档正在解析的时候将内容插入其中来说就太迟了。

使用document.write()方法在文档正在解析的时候产生文档内容,这是极常见的一种编程技术。

2)可以使用document.write()方法结合Document对象的open()和close()方法在其中窗口或帧中创建一个全新的文档。即虽然不能有效地从事件句柄中改写当前文档,但可以把文档写入到另一个窗口或帧中,这在多窗口或多帧的网站中是非常有用的。如下:
function hello() {
    var w = window.open();  // 打开新的窗口,获取其document对象,输出文档内容
    var d = w.document;
    d.open();
    d.write("<h1>hello world</h1>");
    d.close();
}
要创建新文档,首先需要调用Document对象的open()方法,然后多次调用write()方法在文档中写入内容,最后调用Document对象的方法close()以说明文档创建结束。最后一步很重要,如果忘记了关闭文档,浏览器就不能制止它所显示的文档装载动画了。而且浏览器可以把写入的HTML缓存起来,这样在调用方法close()显示结束文档之前,缓存输出不会显示出来。

与必需调用close()不同,open()方法的调用不是必须的。如果调用一个已经关闭了的文档的write()方法,JS会隐式打开一个新的HTML文档,就象已经调用过open()方法一样。这就解释了在同一文档中从事件句柄调用document.write()时会发生什么,即JS打开一个新文档,但在这个过程中,当前文档及其内容,脚本,事件句柄都会被丢弃。作为一条经验,一个文档绝不应该从事件句柄中调用它自己的write()方法。

document.write()方法还有两个地方需要注意。
1)document.write()方法具有多个参数,在传递给它多个参数时,这些参数将被依次写入文档,就像它们已经连接一样。
document.write("hello, ", " " + username, "! Welcome back!");

2)Document对象支持writeln()方法,它几乎与write()方法一样,只不过会在输出参数之后附加一个换行符。如,要输入一个<pre>标记的格式化文本,这可能有用。