DOM 基础与节点操作
DOM 基础与节点操作
DOM(Document Object Model,文档对象模型)是浏览器把 HTML 解析成的一棵节点树,JS 通过 document 对象操作这棵树,就能动态改变页面内容。
这一篇把 DOM 的基础操作合并讲完:获取元素、操作内容、操作属性与样式、节点关系、增删节点、表单操作。这是 DOM 的地基,后面所有交互都建立在它之上。
一、DOM 概念
1 |
|
浏览器会把它解析成一棵节点树:document → html → body → div,每个标签都是一个”节点(元素节点)”。
二、获取元素
1 | // 1. 按 id(返回单个元素,不存在返回 null) |
| 方法 | 参数 | 返回 | 特点 |
|---|---|---|---|
getElementById |
id | 单个元素 | 找不到返回 null |
getElementsByTagName/ClassName |
标签/类名 | HTMLCollection | 动态集合 |
querySelector |
CSS 选择器 | 第一个元素 | 最灵活 |
querySelectorAll |
CSS 选择器 | NodeList | 静态集合 |
⚠️ 坑点:
getElementsBy...返回的是动态集合(页面变化实时反映);querySelectorAll返回的是静态快照。遍历时动态集合会”越删越乱”,所以现代代码基本只用querySelector/querySelectorAll。
三、操作元素内容
1 | el.innerText = "文本"; // 渲染后的文本,不识别标签 |
| 属性 | 说明 | 注意 |
|---|---|---|
innerText |
按渲染结果取文本 | 不识别标签,隐藏元素取不到 |
textContent |
原样取所有文本 | 性能好,包含隐藏元素 |
innerHTML |
解析 HTML | ⚠️ 有 XSS 风险 |
⚠️ XSS 风险:
innerHTML会把字符串当 HTML 解析执行,绝不要插入未经处理用户输入的内容。纯文本用textContent更安全。
四、操作属性与样式
1 | // 1. 直接改常用属性 |
⚠️
style的 CSS 属性名要转成驼峰:background-color→backgroundColor,font-size→fontSize。
五、节点关系
1 | el.parentNode; // 父节点 |
⚠️ 坑点:
childNodes会把换行、空格也当成文本节点,所以遍历子元素请用children(只含元素节点)。
六、增删改节点
1 | // 1. 创建节点 |
记忆点:
appendChild/insertBefore/removeChild是经典 API;append/prepend/remove/replaceWith是更简洁的现代写法,功能等价,优先用后者。
七、表单操作
1 | // 获取值 |
原生表单验证:
1 | <input required> <!-- 必填 --> |
⚠️
submit事件一定要preventDefault()才能阻止页面刷新,这是做”无刷新提交”的第一步。
八、速查表
| 需求 | 写法 |
|---|---|
| 按 CSS 选择器获取 | document.querySelector(".item") / querySelectorAll |
| 按 id 获取 | document.getElementById("box") |
| 改文本内容 | el.textContent = "x" |
| 插入 HTML | el.innerHTML = "<b>x</b>" |
| 加/删类名 | el.classList.add/remove("active") |
| 切换类名 | el.classList.toggle("active") |
| 改样式 | el.style.backgroundColor = "red" |
| 读写属性 | el.getAttribute / setAttribute |
| 自定义属性 | el.dataset.id |
| 父元素 | el.parentElement |
| 子元素集合 | el.children |
| 创建节点 | document.createElement("div") |
| 追加节点 | parent.append(el) |
| 删除节点 | el.remove() |
| 克隆节点 | el.cloneNode(true) |
| 获取输入值 | input.value / checkbox.checked |
| 阻止表单提交 | e.preventDefault() |
九、复习要点
- DOM 是节点树,
document是入口,改 DOM 页面立即生效。 - 获取元素优先用
querySelector/querySelectorAll(静态、灵活);getElementsBy...是动态集合。 - 改文本用
textContent(安全),改 HTML 用innerHTML(⚠️ XSS 风险)。 - 改类名用
classList,改内联样式用style(驼峰),自定义属性用dataset。 - 遍历子元素用
children(不含文本节点),别用childNodes。 - 增删节点:
createElement+append/prepend/insertBefore,删除用remove。 - 表单取值
input.value、checkbox.checked;提交用submit事件 +preventDefault()。 - 忘了某个 API,回本文对应小节查示例即可。
下一篇预告:事件——addEventListener、事件对象、事件流(冒泡/捕获)、事件委托、常用事件类型。