本文深入解析JavaScript中ParentNode和ChildNode接口的核心原理与API用法。详细阐述ParentNode接口的children、firstElementChild、lastElementChild及childElementCount属性,以及append和prepend方法的动态特性。同时介绍ChildNode接口的remove、before、after和replaceWith方法,帮助开发者高效进行DOM节点遍历与操作。
ParentNode 与 ChildNode 接口概述
ParentNode 接口,ChildNode 接口
节点对象在继承 Node 接口的基础上,还具备其他特定的接口。其中,ParentNode 接口用于标识当前节点为父节点,并提供处理子节点的相关方法;ChildNode 接口则用于标识当前节点为子节点,并提供相应的操作方法。
ParentNode 接口详解
ParentNode 接口
当当前节点属于父节点时,会混入(mixin)ParentNode 接口。由于只有元素节点(element)、文档节点(document)和文档片段节点(documentFragment)拥有子节点,因此仅这三类节点具备 ParentNode 接口。
ParentNode.children children 属性返回一个 HTMLCollection 实例,该实例包含当前节点的所有元素子节点。此属性为只读。
以下是遍历某个节点所有元素子节点的示例代码。
for (var i = 0; i < el.children.length; i++) {
// ...
}
需要注意的是,children 属性仅包含元素子节点,不包括文本等其他类型的子节点。若不存在元素类型的子节点,返回的 HTMLCollection 实例的 length 属性值为 0。
此外,HTMLCollection 是一个动态集合,它会实时反映 DOM 结构的任何变化。
ParentNode.firstElementChild
firstElementChild 属性返回当前节点的第一个元素子节点。若不存在任何元素子节点,则返回 null。
document.firstElementChild.nodeName
// "HTML"
在上述代码中,document 节点的第一个元素子节点为 <HTML>。
ParentNode.lastElementChild lastElementChild 属性返回当前节点的最后一个元素子节点。若不存在任何元素子节点,则返回 null。
document.lastElementChild.nodeName
// "HTML"
在上述代码中,document 节点的最后一个元素子节点为 <HTML>(因为 document 仅包含这一个元素子节点)。
ParentNode.childElementCount childElementCount 属性返回一个整数,表示当前节点所有元素子节点的数量。若不包含任何元素子节点,则返回 0。
document.body.childElementCount // 13
节点追加方法:append 与 prepend
ParentNode.append(),ParentNode.prepend()
append 方法用于为当前节点追加一个或多个子节点,插入位置位于最后一个元素子节点之后。
该方法不仅支持添加元素子节点,还可以添加文本子节点。
var parent = document.body;
// 添加元素子节点
var p = document.createElement('p');
parent.append(p);
// 添加文本子节点
parent.append('Hello');
// 添加多个元素子节点
var p1 = document.createElement('p');
var p2 = document.createElement('p');
parent.append(p1, p2);
// 添加元素子节点和文本子节点
var p = document.createElement('p');
parent.append('Hello', p);
需要注意的是,该方法没有返回值。
prepend 方法用于为当前节点追加一个或多个子节点,插入位置位于第一个元素子节点之前。其用法与 append 方法完全一致,同样没有返回值。
ChildNode 接口详解
ChildNode 接口
如果一个节点存在父节点,那么该节点就拥有了 ChildNode 接口。
ChildNode.remove() remove 方法用于从父节点中移除当前节点。
el.remove()
上述代码在 DOM 结构中移除了 el 节点。
ChildNode.before(),ChildNode.after() before 方法用于在当前节点之前插入一个或多个同级节点,这些节点拥有相同的父节点。
需要注意的是,该方法不仅可以插入元素节点,还可以插入文本节点。
var p = document.createElement('p');
var p1 = document.createElement('p');
// 插入元素节点
el.before(p);
// 插入文本节点
el.before('Hello');
// 插入多个元素节点
el.before(p, p1);
// 插入元素节点和文本节点
el.before(p, 'Hello');
after 方法用于在当前节点之后插入一个或多个同级节点,这些节点拥有相同的父节点。其用法与 before 方法完全相同。
ChildNode.replaceWith() replaceWith 方法使用参数节点替换当前节点。参数可以是元素节点,也可以是文本节点。
var span = document.createElement('span');
el.replaceWith(span);
在上述代码中,el 节点将被 span 节点替换。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。