Document类型

JavaScript通过Document类型表示文档。在浏览器中,document对象是HTMLDocument(继承自Document类型)的一个实例,document对象是window对象的一个属性,因此可以将其作为全局对象来访问。Document节点具有下列特征:

nodeType的值为9
nodeName的值为“#document”
nodeValue的值为null
parentNode的值为null
ownerDocument的值为null
其子节点可能是一个DocumentType、Element、ProcessingInstruction或者Comment

 

1、文档的节点

有两个内置的访问其子节点的快捷方式。第一个就是documentElement属性,该属性始终指向HTML页面中的元素。另一个就是通过childNodes列表访问文档元素,但通过documentElement属性更快捷

1          2              3 4              5          6 7          var html = document.documentElement;8          console.log(html === document.childNOdes[0]); //true9          console.log(html === document.firstChild); //true

document对象还有一个body属性,直接指向元素。

1 var body = document.body;

所有浏览器都支持document.documentElement和document.body属性

通常将标签看成一个与文档其他部分不同的实体,可以通过doctype属性来访问他的信息

1 var doctype = document.doctype;

浏览器对document.doctype的支持差别很大

 

2、文档信息

作为HTMLDocument的一个实例,document对象还有一些标准的Document对象所没有的属性。其中第一个属性就是title,包含着中的文本,可以修改当前页面的标题并反映在浏览器的窗口中</p> <pre>1         //取得文档标题2         var originalTitle = document.title;3         //设置文档标题4         document.title = "New page title";</pre> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);">URL、domain和referrer都和页面的请求有关,URL属性中包含完整的URL(即地址栏中的URL)。domain属性中只包含页面的域名,而referrer属性中则保存着链接到当前页面的那个页面的URL。在没有来源页面的情况下,referrer属性中可能会包含空字符串。</p> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);"><br>URL和doamin属性是相互关联的。例如,如果document.URL等于http://www.wrox.com/WileyCDA/,那么document.domain就等于www.wrox.com。</p> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);"><br>在这三个属性中,只有domain属性可以设置。由于安全的方面的限制,如果URL中包含一个子域名,例如p2p.wrox.com,那么就只能将domain设置为"wrox.com"。<br></p> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);"> </p> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);"><strong>3、查找元素</strong></p> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);">Document类型提供了两个方法:getElementById()和getElementsByTagName()</p> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);">getElementById(),接受一个参数:要取得元素的ID,如果找不到匹配的元素返回null,如果页面中有多个相同的ID,则返回第一次出现的元素。</p> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);">getElementsByTagName(),接受一个参数即要取得元素的标签名,而返回的是包含零或多个元素的Nodelist。在HTML文档中,这个方法会返回一个HTMLCollection对象,作为一个“动态”集合,改对象与Nodelist非常类似。</p> <pre>1         var p_w_picpaths = document.getElementsByTagName('img');</pre> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);">这行代码会将一个HTMLCollection对象保存在p_w_picpaths变量中。与Nodelist对象类似,可以使用方括号语法或item()方法来访问HTMLCollection对象中的项。而这个对象中元素的数量可以通过length属性取得。</p> <pre>1         console.log(p_w_picpaths.length);//输出图像的数量2         console.log(p_w_picpaths.item(0).src);//输出第一个图像的src属性3         console.log(p_w_picpaths[0].src);//输出第一个图像的src属性</pre> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);">HTMLCollection对象还有一个方法,叫做namedItem(),使用这个方法可以通过元素的name特性取得集合中的项</p> <pre>1         <img src="myp_w_picpaths.jpg" name="myImages" />2         var myImages = document.namedItem('myImages');</pre> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);">在提供按索引访问项的基础上,HTMLCollention还支持按名称访问项。而且对命名的项也可以使用方括号语法来访问,例如:</p> <pre>1 var myp_w_picpath = p_w_picpaths['myImages'];</pre> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);">要想取得文档中的所有元素,可以向getElementsByTagName()中传入"*"。第一项是<html>元素,第二项是<head>元素,以此类推。</p> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);">第三个方法,也是只有HTMLCollection类型才有的方法,是getElementsByName()。这个方法会返回带有给定name特性的所有元素。最常是有这个方法的情况是取得单选按钮</p> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);"> </p> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);"><strong>4、特殊集合</strong></p> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);">document.anchors,包含文档中所有带name特性的<a>元素,以此类推。<br>document.applets,包含文档中所有<applet>元素。<br>document.forms,包含文档中所有的<form>元素,与document.getElementsByTagName('form')得到的结果相同<br>document.p_w_picpaths,包含文档中所有<img>元素,与document.getElementsByTagName('img')得到的结果相同<br>document.links,包含文档中所有带href特性的<a>元素。</p> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);">这个特殊集合始终都可以通过HTMLDocument对象访问到,而且,与HTMLCollection对象类似,集合中的项也会随着当前文档内容的更新而更新。</p> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);"> </p> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);"><strong>5.DOM一致性检测</strong></p> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);">由于DOM分为多个级别,也包含多个部分,因此检测浏览器实现了DOM的哪些部分就十分必要了。document.implementation属性就是为此提供相应信息和功能的对象,与浏览器对DOM的实现直接对应。DOM1级只为document.implementation规定了一个方法,即hansFrature()。这个方法接受两个参数:要检测的DOM功能的名称以及版本号。如果浏览器支持给定的名称和版本的功能,则该方法返回true,例如:</p> <pre>1 var hasXmlDom = document.implementation.hasFearure("XML",1.0);</pre> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);"> </p> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);"><strong>6、文档的写入</strong></p> <p style="padding:4px 0px;font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:21px;white-space:normal;background-color:rgb(255,255,255);">有一个document对象的功能已经存在很多年了,那就是将输出流写入到网页中的能力。这个能力体现在下列4个方法中:weite()、writeln()、open()和close()。其中,write()和writeln()方法都接受一个字符串参数,即要写入到输出流中的文本。write()会原样写入,而writeln()则会在字符串末尾添加一个换行符(\n)。例如:</p> <p></p> <pre> 1             <html> 2             <head> 3             <title>document.write() Example 4              5              6                 

The current data and  time is: 7                  8                     document.write("" + (new Date()).toString() + ""); 9                 10                 

11             12             

 

 

此外还可以使用write()和writeln()方法动态的包含外部资源,例如JavaScript文件等。注意:不能像下面的例子那样直接包含字符串"",因为这会导致该字符串被解释为脚本块的结束,它后面的代码将无法执行。

 1              2              3             document.write() Example2 4              5              6                  7                     document.write("" + ""); 8                  9             10             

 

 

即使这个文件看起来没错,但字符串""将被解释为与外部的 9             10             

 

 

前面的例子使用document.write()在页面被呈现的过程中直接向其中输出了内容。如果在文档加载结束后再调用document.write(),那么输出的内容将会重写整个页面。

 1              2              3             document.write() Example 4              5              6                 

This is some context that you won't get to see because it will be overwritten.

 7                  8                     window.onload = function(){ 9                         document.write("Hello world!");10                     };11                 12             13             

等到页面完全加载之后延迟执行函数。函数执行之后,字符串"Hello world!"会重写这个页面内容

方法open()和close()分别用于打开和关闭输出流。如果是在页面加载期间使用write()或writeln()方法,则不需要用到这两个方法。