document对象实际上是window对象的属性,如你所知,window对象的任何属性和方法都可直接访问,所以下面这行代码将返回"true":
这个对象的独特之处是它是唯一一个既属于BOM又属于DOM(下一章将讨论DOM中的document对象)的对象。从BOM角度看,document对象由一系列集合构成,这些集合可以访问文档的各个部分,并提供页面自身的信息。再有,由于BOM没有可以指导实现的标准,所以每个浏览器实现的document对象都稍有不同,这一节的重点是最常用的功能。
下表列出了BOM的document对象的一些通用属性:
属 性 |
说 明 |
alinkColor |
激活的链接的颜色,如<body alink="color">定义的* |
bgColor |
页面的背景颜色,如<body bgcolor="color">定义的* |
fgColor |
页面的文本颜色,如<body text="color">定义的* |
lastModified |
最后修改页面的日期,是字符串 |
linkColor |
链接的颜色,如<body link="color">定义的* |
referrer |
浏览器历史中后退一个位置的URL |
title |
<title/>标签中显示的文本 |
URL |
当前载入的页面的URL |
vlinkColor |
访问过的链接的颜色,如<body vlink="color">定义的* |
* 反对使用这些属性,因为它们引用了<body/>标签中的旧HTML特性。应该用样式表脚本代替它们。
lastModified属性获取的是最后一次修改页面的日期的字符串表示,用作旁注,除非你想在主页上显示最后的修改日期(用服务器端的技术也可实现)。同样,referrer属性用处也不大,除非你想跟踪用户是从哪里链接过来的(也许可以查看该用户是通过Google或是其他搜索引擎访问你的站点的)。同样也可以用服务器端的技术实现它。
title属性是可读写的,所以可随时改变页面的标题,无论HTML页面的内容是什么。当站点使用了框架,且只有一个框架改变,其他框架保持不变时,该属性非常有用。可以用该属性改变框架的标题,从而反映出载入了新页面:
URL属性也是可读可写的,所以可用它获取当前页面的URL,或者把它设置为新的URL,把窗口导航到新页面。例如:
如前所述,document对象也有许多集合,提供对载入的页面的各个部分的访问。下表列出了这些集合:
集 合 |
说 明 |
anchors |
页面中所有锚的集合(由<a name="anchorname"></a>表示) |
applets |
页面中所有applet的集合 |
embeds |
页面中所有嵌入式对象的集合(由<embed/>标签表示) |
forms |
页面中所有表单的集合 |
images |
页面中所有图像的集合 |
links |
页面中所有链接的集合(由<a href="somewhere.htm"><a/>表示) |
与window.frame集合相似,可用数字或名字引用document对象的每个集合,也就是说可用document.images[0]或document.images["image_name"]访问图像。考虑下面的HTML页面:
访问该文档各个部分的方法如下:
q 用document.links[0]访问链接;
q 用document.images[0]或document.images["imgHome"]访问图像;
q 用document.forms[0]或document.forms["frmSubscribe"]访问表单。
此外,链接和图像等的所有特性都变成了该对象的属性。例如,document.images[0].src是获取第一个图像的src特性的代码。
最后,BOM的document对象还有几个方法。最常用的方法之一是write()或它的兄弟方法writeln()。这两个方法都接受一个参数,即要写入文档的字符串。如你所料,它们之间唯一的区别是writeln()方法将在字符串末尾加一个换行符(/n)。
这两个方法都会把字符串的内容插入到调用它们的位置。这样浏览器就会像处理页面中的常规HTML代码一样处理这个文档字符串。考虑下面的页面:
该页面在浏览器中看来与下面的页面一样:
可以使用这种功能动态地引入外部JavaScript文件。例如:
这段代码在页面上写了一个<script/>标签,将使浏览器像常规一样载入外部JavaScript文件。注意字符串"</script>"被分成两部分("</src"和"ipt>")。这是必要的,因为每当浏览器遇到</script>,它都假定其中的代码块是完整的(即使它出现在JavaScript字符串中)。假设前面的例子未把"</script>"分成两部分:
浏览器显示如下网页:
可以看到,忘记把字符串"</script>"分成两部分引起了严重的混乱。首先,在<script/>标签内有个语法错,因为document.write()的调用漏掉了闭括号。其次,有两个</script>标签。这就是在使用document.write()方法把<script/>标签写入页面时一定要把"</script>"字符串分开的原因。
记住,要插入内容属性,必须在完全载入页面前调用write()和writeln()方法。如果任何一个方法是在页面载入后调用的,它将抹去页面的内容,显示指定的内容。
与write()和writeln()方法密切相关的是open()和close()方法。open()方法用于打开已经载入的文档以便进行编写,close()方法用于关闭open()方法打开的文档,本质上是告诉它显示写入其中的所有内容。通常把这些方法结合在一起,用于向框架或新打开的窗口中写入内容,如下所示:
这个例子打开空白页(使用本地的"about:blank"URL),然后写入新页面。要正确实现这一操作,在调用write()前,先调用open()方法。写完后,调用close()方法完成显示。当你想显示无需返回服务器的页面时,这种方法非常有用。