Document 类型
Document 类型
Document 接口表示整个文档,并作为网页的入口,即 DOM 树。继承了 Node 接口和 EventTarget 接口。
Document 对象可以通过如下方法获取:
- 正常网页,可直接使用
document或window.document。 iframe框架中的网页,可以使用iframe节点的contentDocument属性。- Ajax 操作返回的文档,可以使用
XMLHttpRequest对象的responseXML属性。 - 网页内部
Node节点的ownerDocument属性。
Document 类型属性
快捷方式属性
document.defaultView: 返回document对象所属的window对象。如果当前文档不属于window对象,则返回null。document.doctype: 返回当前文档的文档类型定义。指向<DOCTYPE>节点,即文档类型(Document Type Declaration,简写 DTD)节点。document.documentElement: 只读属性。返回当前文档对象的根元素节点(root)。对于 HTML 文档,一般是<html>元素节点。document.head: 可读写,返回当前文档中所有的<head>元素节点。document.body: 可读写,返回当前文档中的<body>或<frameset>元素(返回最外层)节点。document.firstElementChild: 返回当前文档中的第一个子元素,如果没有子元素,则返回null。对于 HTML 文档,通常是根<html>元素节点。document.lastElementChild: 返回当前文档中的最后一个子元素,如果没有子元素,则返回null。对于 HTML 文档,通常是根<html>元素节点。document.activeElement: 返回当前获得焦点的 DOM 元素。如果当前没有焦点元素,则返回body元素或者null。document.scrollingElement: 只读属性。返回当前文档的滚动元素(即当文档整体滚动时,滚动的具体元素)。document.pointerLockElement: 只读属性。返回指针锁定时鼠标事件的目标元素。document.fullscreenEnabled: 只读属性。表示全屏模式是否可用。如果指针处于锁定等待中、指针没有被锁定或目标元素在另外一个文档中,返回null。document.fullscreenElement: 只读属性。返回当前以全屏状态展示的 DOM 元素。如果不是全屏状态,该属性返回null。可以通过该属性判断<video>元素节点是否处于全屏,判断用户行为。document.pictureInPictureEnabled: 只读属性。表示画中画模式是否可用。document.pictureInPictureElement: 只读属性。返回当前文档中以画中画模式呈现的 DOM 元素。如果没有使用画中画模式,则返回null。
节点集合属性
document.children: 返回实时的HTMLCollection,其中包含当前文档的所有子元素。document.childElementCount:只读,返回当前文档的子元素数量。document.styleSheets: 只读属性。返回当前文档内嵌或引入的 CSS 样式表集合。document.links: 返回当前文档中所有设置了href属性的<a>或者<area>元素节点。document.forms: 返回当前文档所有的<form>元素节点。使用位置序号、id属性和name属性也可以用来引用表单。document.images: 返回当前文档所有的<image>元素节点。document.scripts: 返回一个HTMLCollection对象,包含当前文档中所有<script>元素节点。document.embeds: 返回当前文档中所有的<embed>元素节点。document.plugins: 只读属性。返回一个HTMLCollection对象,该对象包含一个或多个HTMLEmbedElement表示当前文档中的<embed>元素。document.fonts: 返回当前文档的FontFaceSet接口(可管理着字体的加载和查询字体下载状态)。文档静态信息属性
document.documentURI: 以字符串的形式返回当前文档的网址。documentURI继承自Document接口,可用于所有文档。document.URL: 返回当前文档的 URL 地址。URL继承自HTMLDocument接口,只能用于 HTML 文档。document.title: 用于获取或设置当前文档的标题。如果存在,默认为<title>元素节点的值。document.location: 获取浏览器原生对象location,用于提供获取 URL 的相关信息和操作方法。document.lastModified: 以字符串形式返回当前文档最后修改的时间(不同浏览器返回日期格式不同,可用Date.parse方法转为Date实例进行比较)。如果页面上有 JavaScript 生成内容,该属性返回为当前时间。document.contentType: 返回当前文档的 Content-Type(MIME) 类型。document.characterSet: 返回当前文档的字符编码(例如 UTF-8)。document.referrer: 返回 URI ,表示当前页面是从该 URI 所代表的页面跳转或者打开的。如果无法获取来源,或者用户直接键入网址而不是从其他网页点击进入,返回一个空字符串。document.dir: 返回当前文档的文字方向。ltr表示从左到右,rtl表示从右到左。document.timeline: 只读属性。返回当前文档的默认时间轴(DocumentTimeline的特殊实例,在网页加载时自动创建)。document.compatMode: 返回当前文档的渲染模式。"BackCompat": 当前文档为怪异模式。"CSS1Compat": 当前文档为标准模式或者准标准模式。
文档状态属性
document.hidden: 返回布尔值,表示当前页面是否可见。如果窗口最小化、浏览器切换 Tab,都会导致document.hidden返回true。document.visibilityState: 返回当前文档的可见状态。visible: 页面可见。注意,页面可能是部分可见,即不是焦点窗口,前面被其他窗口部分挡住了。hidden: 页面不可见。即文档处于背景标签页或者窗口处于最小化状态,或者操作系统正处于“锁屏状态”。prerender: 页面正在渲染中。对于用户来说,该页面不可见。unloaded: 页面从内存里面卸载了。
document.readyState: 返回当前文档的加载状态。loading: 加载中。加载 HTML 代码阶段,尚未解析完成。interactive: 可交互。文档已被解析,正在加载状态结束,但是图像、样式表和框架之类的子资源仍在加载。complete: 加载完成。文档和所有子资源已完成加载。load状态的事件即将被触发。
文档其他属性
document.designMode: 控制整个文档是否可编辑。属性值默认为off,表示不可编辑;on表示为可编辑。document.cookie: 获取并设置当前文档关联的 Cookie 。document.currentScript: 返回当前文档正在运行脚本所在的<script>元素节点。document.implementation: 返回一个和当前文档相关联的DOMImplementation对象。DOMImplementation.createDocument: 创建一个 XML 文档。DOMImplementation.createHTMLDocument: 创建一个 HTML 文档。DOMImplementation.createDocumentType: 创建一个 DocumentType 对象。
Document 类型方法
文档操作方法
document.open()语法 :
document.open()描述 : 清除当前文档所有内容,使得文档处于可写状态,供
document.write方法写入内容。document.close()语法 :
document.close()描述 : 关闭
document.open()打开的文档。document.write()语法 :
document.write(string)描述 : 将文本字符
string(可以是 HTML 代码)写入一个由document.open()打开的文档流(document stream)。- 如果页面已经解析完成(
DOMContentLoaded事件发生之后),调用document.write()方法,会先自动调用document.open()方法,擦除当前文档所有内容,再写入。 - 如果页面在渲染过程中,调用
document.write()方法,并不会自动调用document.open()方法。(可以理解为document.open()方法已调用,但document.close()方法还未调用) - 如果
document.write()调用发生在 HTML 里的<script>标签中,将不会自动调用document.open()方法。
- 如果页面已经解析完成(
document.writeln()语法 :
document.writeln(string)描述 : 与
document.write(string)方法一致,但会在每次调用后添加一个换行符。document.writeln()方法添加的是 ASCII 码的换行符,渲染成 HTML 网页时不起作用,即在网页上显示不出换行。网页上的换行,必须显式写入<br>。
document.exitFullscreen()语法 :
document.exitFullscreen()描述 : 用于将当前文档退出全屏模式。
- 调用该方法会让文档回退上一个调用
element.requestFullscreen()方法进入全屏模式之前的状态。 - 如果一个元素 A 在请求进去全屏模式之前,已经存在其他元素处于全屏状态,当元素 A 退出全屏模式之后,之前的元素仍然处于全屏状态。浏览器内部维护了一个全屏元素栈。
- 调用该方法会让文档回退上一个调用
document.exitPictureInPicture()语法 :
document.exitPictureInPicture()描述 : 请求退出以画中画模式浮动在此文档中播放的视频,来恢复屏幕之前的状态。返回一个
Promise,在用户代理退出画中画模式时兑现。如果在尝试退出全屏模式时发生错误,将会调用Promise的catch()处理程序。
添加替换元素节点方法
document.adoptNode()语法 :
document.adoptNode(externalNode)描述 : 将某个节点
externalNode以及其子节点,从原来文档移除并移动到当前文档,并返回移动后的节点externalNode。externalNode节点对象的ownerDocument属性会被设置为当前文档,而其parentNode属性为null。- 该方法只是改变了节点的归属,可以使用
Node.prototype.appendChild()等方法,将新节点插入当前文档。
document.importNode()语法 :
document.importNode(externalNode, deep)描述 : 将某个节点
externalNode以及其子节点,从原来文档复制到当前文档,并返回复制后的节点externalNode。externalNode节点对象的ownerDocument属性会被设置为当前文档,而其parentNode属性为null。- 该方法只是复制外部节点,可以使用
Node.prototype.appendChild()等方法,将新节点插入当前文档。
参数 :
externalNode参数:表示要复制的节点。deep参数:可选值。一个布尔值,默认为false,表示是否深度复制。- 如果为
true,则会复制节点的所有后代节点。 - 如果为
false,则只复制当前节点。
- 如果为
document.prepend()语法 :
document.prepend(node1, node2, ..., nodeN)描述 : 将一组节点添加到当前文档的最前面。
document.append()语法 :
document.append(node1, node2, ..., nodeN)描述 : 将一组节点添加到当前文档的最后面。
document.replaceChildren()语法 :
document.replaceChildren(node1, node2, ..., nodeN)描述 : 将一组节点替换当前文档的所有子节点。
创建元素节点方法
document.createElement()语法 :
document.createElement(tagName[, options])描述 : 创建一个具有指定标签名
tagName的元素节点,并返回。参数 :
tagName参数:表示要创建的元素的标签名。不区分大小写(div或DIV返回的是同一种节点。)。options参数:可选值。options.is:表示要创建的元素的自定义标签名(使用customElements.define()方法定义过的一个自定义元素的标签名)。如果不是自定义标签,则该参数无效。
document.createAttribute()语法 :
document.createAttribute(name)描述 : 创建一个属性节点,返回
Attr对象。var node = document.getElementById('div1') var a = document.createAttribute('my_attrib') a.value = 'newVal' node.setAttributeNode(a) // 或者 node.setAttribute('my_attrib', 'newVal')document.createTextNode()语法 :
document.createTextNode(data)描述 : 创建一个包含指定文本数据
data的文本节点,并返回。- 可以用来转义 HTML 字符。
- 不对单引号和双引号转义,所以不能用来对 HTML 属性赋值。
document.createComment()语法 :
document.createComment(data)描述 : 创建一个包含指定注释数据
data的Comment节点,并返回。document.createDocumentFragment()语法 :
document.createDocumentFragment()描述 : 创建一个空白的文档片段
DocumentFragment,并返回。document.createCDATASection()语法 :
document.createCDATASection(data)描述 : 创建一个包含指定数据
data的CDATASection节点,并返回。document.caretPositionFromPoint()语法 :
document.caretPositionFromPoint(x, y)描述 : 返回一个
CaretPosition对象,表示指定坐标(x, y)处的光标位置。CaretPosition.offsetNode:返回一个Node对象,表示光标所在的节点。CaretPosition.offset:返回一个整数,表示光标在offsetNode节点内的偏移量。
document.createRange()语法 :
document.createRange()描述 : 创建一个
Range对象,表示文档中的连续范围。
查找元素节点方法
document.getElementById()语法 :
document.getElementById(id)描述 : 返回一个匹配指定
id属性(大小写敏感)的元素节点。如果没有匹配的节点,则返回null。document.getElementsByClassName()语法 :
document.getElementsByClassName(names)描述 : 返回一个类数组对象,包含匹配
class类名(大小写敏感)的所有元素节点。- 不仅可用在
document对象上,也可用在任何元素节点上。调用该方法的元素将作为本次查找的根元素。
参数 :
names参数:字符串,表示匹配的class类名列表。可以是多个类名,通过空格隔开,如:foo bar。
- 不仅可用在
document.getElementsByName()语法 :
document.getElementsByName(name)描述 : 返回一个类数组对象(
NodeList实例),包含匹配name属性(大小写敏感)的所有元素节点。- 返回的
NodeList实例是实时更新的。 - 返回包括拥有
name属性的元素节点(比如<form>、<radio>、img、frame等),以及添加了name自定义属性的元素(比如<a name="customNameAttr">)。
- 返回的
document.getElementsByTagName()语法 :
document.getElementsByTagName(tagName)描述 : 返回一个类数组对象(
HTMLCollection实例),包含匹配指定元素节点名tagName的所有元素节点。- 不仅可用在
document对象上,也可用在任何元素节点上。调用该方法的元素将作为本次查找的根元素。
参数 :
tagName参数:字符串,表示匹配的元素节点名。- 不区分大小写(
div或DIV返回的是同一种节点)。 - 特殊字符
*表示匹配文档中的所有元素节点。
- 不区分大小写(
- 不仅可用在
document.getSelection()语法 :
document.getSelection()描述 : 指向
window.getSelection(),返回一个Selection对象,表示选择的文本范围或当前的游标位置。document.getAnimations()语法 :
document.getAnimations()描述 : 返回一个数组,其中包含当前有效的所有动画对象(其目标元素是文档的后代)。该数组包括 CSS 动画、CSS 过渡和 Web 动画。
document.querySelector()语法 :
document.querySelector(selectors)描述 : 返回匹配指定 CSS 选择器
selectors的第一个元素节点。如果没有匹配的节点,则返回null。如果未匹配到节点,则返回null。- 匹配是使用深度优先先序遍历,从文档标记中的第一个元素开始,并按子节点的顺序依次遍历。
- 不仅可用在
document对象上,也可用在任何元素节点上。调用该方法的元素将作为本次查找的根元素。
参数 :
selectors参数:字符串,表示 CSS 选择器。- 支持复杂 CSS 选择器,但不支持 CSS 伪元素和伪类选择器(即无法选中伪元素和伪类)。
- 可以使用逗号分隔多个选择器,返回匹配其中一个选择器的第一个元素节点。
- 特殊字符
*表示匹配文档中的所有元素节点。
document.querySelectorAll()语法 :
document.querySelectorAll(selectors)描述 : 返回一个类数组对象(
NodeList实例,非动态),包含匹配指定 CSS 选择器selectors的所有元素节点。如果未匹配到节点,则返回null。- 不仅可用在
document对象上,也可用在任何元素节点上。调用该方法的元素将作为本次查找的根元素。
参数 :
selectors参数:字符串,表示 CSS 选择器。- 支持复杂 CSS 选择器,但不支持 CSS 伪元素和伪类选择器(即无法选中伪元素和伪类)。
- 可以使用逗号分隔多个选择器,返回匹配其中一个选择器的第一个元素节点。
- 不仅可用在
document.hasFocus()语法 :
document.hasFocus()描述 : 返回一个布尔值,表示当前文档中是否有元素被激活或获得焦点。
- 有焦点的文档必定被激活(active),反之不成立,激活的文档未必有焦点。比如,用户点击按钮,从当前窗口跳出一个新窗口,该新窗口就是激活的,但是不拥有焦点。
遍历元素节点方法
document.createNodeIterator()语法 :
document.createNodeIterator(root, whatToShow, filter)描述 : 创建一个
NodeIterator对象,用于遍历指定节点root的子节点。参数 :
root参数:表示要遍历的根节点。whatToShow参数:可选值。表示要遍历的节点类型。主要节点类型如下:常量名 数字值 描述 NodeFilter.SHOW_ALL-1显示所有节点 NodeFilter.SHOW_ELEMENT1显示元素节点 NodeFilter.SHOW_TEXT4显示文本节点 NodeFilter.SHOW_COMMENT128显示注释节点 filter参数:可选值。表示一个NodeFilter对象,用于过滤要遍历的节点。NodeFilter对象的acceptNode()方法需要返回下列常量之一:NodeFilter.FILTER_ACCEPT,NodeFilter.FILTER_REJECT或NodeFilter.FILTER_SKIP。
document.createTreeWalker()语法 :
document.createTreeWalker(root, whatToShow, filter)描述 : 创建一个
TreeWalker对象,用于遍历指定节点root的子节点和位置。参数 : 与
document.createNodeIterator()方法一致。
文档其他方法
document.elementFromPoint()语法 :
document.elementFromPoint(x, y)描述 : 返回指定位置
(x, y)(相对于当前视口)最上层的元素节点。- 如果位于该位置的 HTML 元素不可返回(比如文本框的滚动条),则返回它的父元素(比如文本框)。
- 如果坐标值无意义(比如负值或超过视口大小),则返回
null。
document.elementsFromPoint()语法 :
document.elementsFromPoint(x, y)描述 : 返回一个数组,包含指定位置
(x, y)(相对于当前视口)的所有元素。
