#document document
|__html document.documentElement
|__head document.head
|__body document.body
![[Pasted image 20240426142132.png|500]]
DOM 元素为“空”用 null 表示
elem.childNodes返回 elem 的子节点集合,类型是 NodeList
firstChild 和 lastChild 属性是访问第一个和最后一个 childNodes 的快捷方式:
elem.childNodes[0] === elem.firstChild
elem.childNodes[elem.childNodes.length - 1] === elem.lastChild
elem.children返回 elem 的子元素集合,类型是 HTMLCollection
firstElementChild 和 lastElementChild 属性是访问第一个和最后一个 children 的快捷方式:
elem.children[0] === elem.firstElementChild
elem.children[elem.children.length - 1] === elem.lastElementChild
previousSibling 和 nextSibling 访问前一个和后一个兄弟 NodepreviousElementSibling 和 nextElementSibling 访问前一个和后一个兄弟 ElementparentNode 访问父 NodeparentElement 访问父 Element两者基本相同,因为父节点一般都是元素,除了:
document.documentElement.parentNode // document
document.documentElement.parentElement // null
// document 不是 Element
某些类型的 DOM 元素可能会提供特定于其类型的其他属性。
<table>table.rows —— <tr> 元素的集合。table.caption/tHead/tFoot —— 引用元素 <caption>,<thead>,<tfoot>。table.tBodies —— <tbody> 元素的集合(根据标准还有很多元素,但是这里至少会有一个 —— 即使没有被写在 HTML 源文件中,浏览器也会将其放入 DOM 中)。<thead>、<tfoot>、<tbody>tbody.rows —— 表格内部 <tr> 元素的集合。<tr>tr.cells —— 在给定 <tr> 中的 <td> 和 <th> 单元格的集合。tr.sectionRowIndex —— 给定的 <tr> 在封闭的 <thead>/<tbody>/<tfoot> 中的位置(索引)。tr.rowIndex —— 在整个表格中 <tr> 的编号(包括表格的所有行)。<td>、<th>td.cellIndex —— 在封闭的 <tr> 中单元格的编号。#todo
getElement*document.getElementById如果一个元素有 id 特性(attribute),就可以使用 document.getElementById(id) 方法获取该元素。
注意:
id 命名的全局变量来访问元素
id 必须是唯一的
id,document.getElementById() 的行为是不可预测的document.getElementById,没有 anyElem.getElementByIdgetElementsBy*elem.getElementsByTagName(tag):查找具有给定标签的元素,并返回它们的集合
tag 参数也可以是对于“任何标签”的星号 "*"。elem.getElementsByTagNameNS(namespace, tag):查找命名空间下具有给定标签的元素,并返回它们的集合
getElementsByTagName 的差别是多了 [[002.DOM:节点与集合#命名空间|命名空间]]elem.getElementsByClassName(className):返回具有给定类名的元素集合document.getElementsByName(name):返回在文档范围内具有给定 name 特性的元素集合注意:
s,和 [[#document.getElementById|document.getElementById]] 不同的是返回的都是集合,而不是单个元素Element 集合,HTMLCollection 类型document.getElementsByName,没有 anyElem.getElementsByNameelem.querySelector*elem.querySelector(css):返回 elem 中与给定 CSS 选择器匹配的第一个元素elem.querySelectorAll(css):返回 elem 中与给定 CSS 选择器匹配的所有元素,集合注意:
querySelector(css) 等同与 querySelectorAll(css)[0],但是 querySelector 查找到一个就会停止,因此速度更快querySelectorAll 返回的集合是 NodeList 类型。document.querySelectorAll 惰性机制,DOM 增删节点不会即时更新返回的集合elem.matches(css)检查 elem 是否与给定的 CSS 选择器匹配,返回 boolean
elem.closest(css)查找与 CSS 选择器匹配的最近的祖先节点,elem 自己也会被搜索