# Document 节点 ## 概述 `document`节点对象代表整个文档,每张网页都有自己的`document`对象。`window.document`属性就指向这个对象。只要浏览器开始载入 HTML 文档,该对象就存在了,可以直接使用。 `document`对象有不同的办法可以获取。 - 正常的网页,直接使用`document`或`window.document`。 - `iframe`框架里面的网页,使用`iframe`节点的`contentDocument`属性。 - Ajax 操作返回的文档,使用`XMLHttpRequest`对象的`responseXML`属性。 - 内部节点的`ownerDocument`属性。 `document`对象继承了`EventTarget`接口和`Node`接口,并且混入(mixin)了`ParentNode`接口。这意味着,这些接口的方法都可以在`document`对象上调用。除此之外,`document`对象还有很多自己的属性和方法。 ## 属性 ### 快捷方式属性 以下属性是指向文档内部的某个节点的快捷方式。 **(1)document.defaultView** `document.defaultView`属性返回`document`对象所属的`window`对象。如果当前文档不属于`window`对象,该属性返回`null`。 ```javascript document.defaultView === window // true ``` **(2)document.doctype** 对于 HTML 文档来说,`document`对象一般有两个子节点。第一个子节点是`document.doctype`,指向``节点,即文档类型(Document Type Declaration,简写DTD)节点。HTML 的文档类型节点,一般写成``。如果网页没有声明 DTD,该属性返回`null`。 ```javascript var doctype = document.doctype; doctype // "" doctype.name // "html" ``` `document.firstChild`通常就返回这个节点。 **(3)document.documentElement** `document.documentElement`属性返回当前文档的根元素节点(root)。它通常是`document`节点的第二个子节点,紧跟在`document.doctype`节点后面。HTML网页的该属性,一般是``节点。 **(4)document.body,document.head** `document.body`属性指向``节点,`document.head`属性指向``节点。 这两个属性总是存在的,如果网页源码里面省略了``或``,浏览器会自动创建。另外,这两个属性是可写的,如果改写它们的值,相当于移除所有子节点。 **(5)document.scrollingElement** `document.scrollingElement`属性返回文档的滚动元素。也就是说,当文档整体滚动时,到底是哪个元素在滚动。 标准模式下,这个属性返回的文档的根元素`document.documentElement`(即``)。兼容(quirk)模式下,返回的是``元素,如果该元素不存在,返回`null`。 ```javascript // 页面滚动到浏览器顶部 document.scrollingElement.scrollTop = 0; ``` **(6)document.activeElement** `document.activeElement`属性返回获得当前焦点(focus)的 DOM 元素。通常,这个属性返回的是``、`