[toc]
| 单词 | 词性 | 音标 | 含义 |
|---|---|---|---|
| DOM | n. | /ˌdiː əʊ ˈem/ | 文档对象模型,浏览器把 HTML 解析成的一棵可操作对象树 |
| document | n. | /ˈdɒkjumənt/ | 代表整棵 DOM 树的入口对象,用它查找和修改页面元素 |
| element | n. | /ˈelɪmənt/ | 元素,DOM 树上的一个节点/对象 |
| querySelector | v. | /kwɪəri səˈlektə/ | 按 CSS 选择器(如 .类名)查找元素,比 getElementById 通用 |
| getElementById | v. | /ɡet ˈelɪmənt baɪ aɪ diː/ | 按 id 查找元素的经典方法 |
| addEventListener | v. | /əd ɪˈvent ˈlɪsnə/ | 给元素绑定事件监听器,写法 addEventListener('事件名', 回调) |
| textContent | n. | /ˈtekst ˈkɒntent/ | 元素的文本内容属性,改它就改掉了页面显示的文字 |
Lecture07-DOM 与事件
1、本节讲什么
从这一节开始进入浏览器环境(Node 跑不了的代码)。用最朴素的一个纯 HTML 文件来体验 DOM:找到元素 → 修改它 → 响应点击。这里还不需要 Vue,先搞懂 DOM 本身。
2、概念速览
什么是 DOM:浏览器把 HTML 页面读进来,解析 HTML 标签的结构,把 HTML 标签建成一棵"对象树"(Document Object Model)。你想改页面,就是在这棵树上"找到元素 → 改它"。

类比:HTML 是"图纸",DOM 是浏览器搭好的"实体房子",document 是这栋房子的入口。
正确 vs 误区:DOM 不是 HTML 本身,而是浏览器给你的"可操作接口"——别把 document 和 HTML 文本混为一谈。
- HTML 标签:属于 HTML 标记语言中的语法现象
- DOM:属于 JavaScript 根据 HTML 标签封装得到的对象实例
3、先看效果
新建 dom-demo.html(纯 HTML,不依赖任何工程或框架),用浏览器直接打开,点按钮标题会变:
<!DOCTYPE html>
<html>
<body>
<h1 id="title">原始标题</h1>
<p class="desc">这是一段描述</p>
<button id="btn">点我改标题</button>
<!-- 注意:script 放 body 末尾,确保上面的元素已存在 -->
<script>
// 找到元素(类似"按 id 找到对象")
const title = document.getElementById('title')
const btn = document.getElementById('btn')
// 给按钮绑定点击事件
btn.addEventListener('click', () => {
title.textContent = '标题被改了!'
title.style.color = 'red'
})
</script>
</body>
</html>
4、照着做
- 新建
dom-demo.html,粘贴上面内容(VS Code 或记事本建都行,纯文本)。 - 双击它,用浏览器直接打开,点"点我改标题",看标题文字和颜色变化。
- 再试一步:往
<script>里加一行,用document.querySelector('.desc')找到那段描述并改掉,体会"按 class 找元素":
document.querySelector('.desc').textContent = '描述也被改了'
- 为什么这段不用 Node?因为
document是浏览器独有的对象,Node 环境没有,必须放浏览器里跑。
5、常见疑问
- Q:为什么 script 要放在
</body>末尾? A:JS 从上往下执行。如果 script 在按钮之前,执行到getElementById('btn')时按钮还不存在,会返回null,再.addEventListener就报错。放末尾(或包在DOMContentLoaded里)保证元素先存在。 - Q:为什么我
getElementById老返回 null? A:基本就是上面这个"时机"问题:script 跑在元素创建之前。检查是否放在末尾,或确认 id 没写错。 - Q:
title.style.color = 'red'是什么? A:元素的样式对象,直接改,等价于 CSS 写color: red。 - Q:除了点击还能监听什么?
A:
click(点击)、change(输入变化)、keydown(按键)、mouseover(移入)等,写法都是addEventListener('事件名', 回调)。 - Q:这里为什么不用 Vue? A:Vue 到第 9 节才学。先用纯 HTML 把"DOM 是什么、怎么操作"搞懂;后面学 Vue 你会发现它自动帮你操作 DOM,你只管改数据。
6、规范要点
- 想要批量获取 DOM 对象时,优先
document.querySelector('.类名'),比一堆getElementById通用。 - 事件回调里只写"页面要发生什么",复杂逻辑另写函数。复杂逻辑拆分成多个函数调用。
- DOM 操作能少就少——现在手动改,用 Vue 框架后就不用自己动手了。
7、本节验证
- 能写一个纯 HTML 文件,用浏览器双击打开并操作 DOM ✅
- 会用
document.getElementById/document.querySelector找到页面元素 ✅ - 会给按钮
addEventListener('click', ...)绑定点击事件并改标题文字和颜色 ✅ - 知道 script 要放在
</body>末尾,否则getElementById会返回 null ✅ - 明白
document是浏览器独有对象,这段代码在 Node 里跑不了 ✅