JavaScript DOM 与事件
浏览器把你写的 HTML 解析成一棵活的对象树——这就是 DOM(Document Object Model,文档对象模型)。页面上看得见的每个标签、每段文字、每条注释,都是树上的一个节点对象;JavaScript 通过 document 这个入口,就能查找、读写、增删这些节点,把静态页面变成可交互的应用。而用户的每一次点击、敲键、提交、滚动,浏览器都会派发一个事件沿着这棵树传播——你只要在合适的节点挂上监听器,就能在对的时刻跑对的逻辑。本叶把「操作 DOM 树」与「响应事件」这两件前端基本功讲透:从节点类型与遍历、创建与插入、属性与样式,到事件三阶段、addEventListener、事件委托,再到表单事件与脚本加载时机。
概述
- 它管什么:用
document找到并修改页面里的节点(查找 / 遍历 / 创建 / 插入 / 删除 / 读写属性与样式),以及监听并响应用户与浏览器派发的事件(点击 / 输入 / 提交 / 页面加载等)。这两件事合起来,就是「让页面动起来」的最底层能力。 - 为什么值得认真学:所有前端框架(Vue / React)最终都落到这套 DOM API 与事件模型之上——
v-on/onClick是对addEventListener的封装,虚拟 DOM diff 之后调用的仍是append/remove/textContent。看懂这一层,框架的「魔法」就变成了可推理的机制;遇到「事件没触发」「innerHTML注入风险」「脚本拿不到元素」这类问题也能直接定位。 - 现代化关注点:统一用
querySelector/querySelectorAll(CSS 选择器)查找而非老式getElementBy*;用append/prepend/before/after/remove这套现代节点 API 取代appendChild/removeChild;用classList与dataset取代手拼className字符串;区分textContent(安全)与innerHTML(有 XSS 风险);事件统一用addEventListener并善用事件委托;脚本统一用defer/type="module"控制加载时机,从根上避免「DOM 还没就绪」。
本叶地图
- 入门 —— 从「DOM 是什么」切入,一段最小脚本串起查找节点、改内容、绑事件三条主线
- DOM 树与遍历 —— 节点类型、
document入口、querySelector*/getElementBy*查找、树的遍历属性 - 修改文档 —— 创建 / 插入 / 删除节点、
textContentvsinnerHTML、DocumentFragment批量插入 - 属性、特性与样式 —— 特性(attribute)vs 属性(property)、
dataset、classList、style与getComputedStyle、尺寸坐标 - 事件机制 —— 事件三阶段(捕获 / 目标 / 冒泡)、
addEventListener、event对象、stopPropagation/preventDefault - 事件委托 —— 用冒泡把多元素的处理收拢到一个父节点、
closest定位、自定义事件CustomEvent与dispatchEvent - 表单事件与页面加载 —— 表单与控件事件(
input/change/submit/focus)、DOMContentLoadedvsload、defer/async脚本时机 - 参考 —— 查找 / 修改 / 事件速查表 + 各特性 Baseline 状态 + 标准与调试链接
文档地址
- MDN: Document Object Model (DOM)
- MDN: DOM 介绍
- javascript.info: Document(DOM 部分)
- javascript.info: Introduction to browser events