DOM《ParentNode接口与ChildNode接口》

81 阅读2分钟

概述

  • 节点对象除了继承Node接口外,还拥有其他接口。ParentNode表示当前节点是一个父节点,提供一些处理子节点的方法。ChildNode表示当前节点是一个子节点,提供一些相关方法。

ParentNode

只有元素节点、文档节点、文档片段节点拥有子节点,因此只有这三类节点拥有ParentNode接口。

children

  • 返回一个当前节点的所有元素子节点HTMLCollection实例,该属性只读。
<body>
  <div>123</div>
  <div>456</div>
</body>

document.body.children  // HTMLCollection(2) [div, div]

firstElementChild

  • 返回当前节点的第一个元素子节点。如果没有则返回null
console.dir(document.firstElementChild);  // html

lastElementChild

  • 返回当前节点的最后一个元素子节点。如果没有则返回null
console.dir(document.lastElementChild);  // html

childElementCount

  • 返回一个整数,表示当前节点的所有元素子节点的数量,如果不包含则返回0
 console.log(document.childElementCount);  // 1

append()

  • 为当前节点追加一个或多个子节点(元素节点、文本节点),位置是最后一个元素子节点的后面。没有返回值。
// 添加元素子节点
var p = document.createElement('p');
document.body.append(p);

// 添加文本子节点
parent.append('Hello');

// 添加元素子节点和文本子节点
var p = document.createElement('p');
parent.append('Hello', p);

prepend()

  • 为当前节点追加一个或多个子节点,位置是第一个元素子节点的前面。其他与append一致。

ChildNode

  • 如果一个节点有父节点,那么该节点就拥有了ChildNode接口。

remove()

  • 从父节点移除当前节点。
<body>
  <div>123</div>
  <div>456</div>
</body>

let div = document.getElementsByTagName('div')[0]
div.remove()

// 移除后的DOM结构:
<body>
  <div>456</div>
</body>

before()

  • 在当前节点的前面插入一个或多个同级节点(元素节点、文本节点),两者拥有相同的父节点。
<body>
  <div>123</div>
</body>

let div = document.getElementsByTagName('div')[0]
let p = document.createElement('p');
// 插入元素节点
div.before(p);
// 插入文本节点
div.before('aaaa')

// 添加后的DOM结构:
<body>
  <p></p>
  "aaaa"
  <div>123</div>
</body>

after()

  • 在当前节点的后面插入一个或多个同级节点(元素节点、文本节点),两者拥有相同的父节点。与before一致。

replaceWith()

  • 使用参数节点(元素节点、文本节点)替换当前节点。
<div>123</div>

let div = document.getElementsByTagName('div')[0]
let p = document.createElement('p');
// p替换div
div.replaceWith(p);  

<p></p>