DOM
DOM(Document Object Model) 文档对象模型
- Document:html 文档
- Object:html 元素
- Model:树模型
是一组用来描述 JS 代码怎样与 html 文档进行交互和访问的 web 标准,它定义了一系列对象、方法和属性,用于访问、操作和创建文档中的内容、结构、样式和行为。
JavaScript 包括 DOM,JavaScript 由 ECMAScript、DOM、BOM 组成
节点
<div>
<p title="title">content</p>
</div>
div
、p
表示元素节点title
表示属性节点content
表示文本节点
操作元素节点
- 创建
createElement
- 插入
appendChild
、insertBefore
- 复制
cloneNode
- 删除
removeChild
- 替换
replaceChild
createElement
创建节点,创建好的元素并未添加进页面
let h1 = document.createElement('h1');
console.log(h1); // <h1></h1>
appendChild、insertBefore
插入节点
let h1 = document.createElement('h1');
let h2 = document.createElement('h2');
let box = document.getElementById('box');
box.appendChild(h1);
box.insertBefore(h2, h1); // 将h2添加到h1的前面
cloneNode
复制节点
// <div id="box">hello</div>
let box = document.getElementById('box');
let rs = box.cloneNode(); // 浅复制
// let rs = box.cloneNode(true) // 深复制
removeChild
移除节点
/**
<div id="box">
<h1>hello</h1>
<p>world</p>
</div>
*/
let box = document.getElementById('box');
let rm = document.getElementsByTagName('p')[0];
box.removeChild(rm); // 删除p元素
replaceChild
替换节点
/**
<div id="box">
<h1>hello</h1>
</div>
*/
let box = document.getElementById('box');
let h1 = box.getElementsByTagName('h1')[0];
let p = document.createElement('p');
box.replaceChild(p, h1);
操作属性节点
两种操作方式:
- 对象.属性
setAttribute()
、getAttribute()
对象.属性 方式只对 html 中定义的属性起作用,可获取或修改属性
// <a href="http://www.baidu.com">百度</a>
let a = document.getElementsByTagName('a')[0];
console.log(a.href);
// a.href = 'xxx'
const div = document.getElementById('id');
div.setAttribute('class', 'className');
示例:
const div = document.createElement('div');
const dataAttribute = document.createAttribute('custom');
dataAttribute.value = '666';
// 将属性节点添加到元素节点上
div.setAttributeNode(dataAttribute);
// 插入dom
document.getElementsByTagName('body')[0].appendChild(div);
操作文本节点
createTextNode
const content = document.createTextNode('content');
innerHTML
- 修改 dom 节点的文本内容
- 通过 html 片段,修改节点内容
const div = document.createElement('div');
div.innerHTML = 'hello';
// div.innerHTML = '<p>123</p>';