js连接html的桥梁
JavaScript 连接 HTML 核心方法笔记(简洁版)
核心思想:使用 doms 对象集中管理所有 DOM 元素引用
一、获取元素:定位 HTML 骨架的「坐标」
核心方法:使用 doms 对象集中存储元素引用
// ✅ 推荐:将所有 DOM 元素引用集中管理
const doms = {
audio: document.querySelector('audio'), // 音频播放器(标签选择器)
lyricList: document.querySelector('.container ul'), // 歌词列表容器(组合选择器)
playBtn: document.querySelector('#playBtn'), // 播放按钮(ID 选择器)
box: document.querySelector('.box') // 通用盒子(类选择器)
};
| 方法 | 作用 | 常用场景 | 示例(结合 doms 对象) |
|---|---|---|---|
querySelector() |
获取第一个匹配的元素(返回单个元素或 null) |
获取唯一元素或复杂选择器元素 | doms.audio = document.querySelector('audio'); |
querySelectorAll() |
获取所有匹配的元素(返回静态 NodeList) |
批量操作同类元素 | const allLi = doms.lyricList.querySelectorAll('li');(通过已有容器获取子元素) |
选择器类型适配场景:
- 标签名(如
audio):定位特定类型标签(唯一或少量同类) - 类名(如
.box):定位一组相同样式的元素(批量操作) - ID(如
#playBtn):定位全局唯一元素(如按钮)
二、事件绑定:感知用户行为的「传感器」
核心方法:通过 doms 对象中的引用绑定事件
// ✅ 推荐:通过 doms 对象绑定事件
doms.playBtn.addEventListener('click', () => {
if (doms.audio.paused) {
doms.audio.play();
doms.playBtn.textContent = '暂停';
} else {
doms.audio.pause();
doms.playBtn.textContent = '播放';
}
});
| 方法 | 作用 | 常用场景 | 示例(结合 doms 对象) |
|---|---|---|---|
addEventListener() |
为元素绑定事件监听器(支持多监听器) | 按钮点击、输入框输入等 | doms.audio.addEventListener('timeupdate', () => { ... }); |
三、修改内容与样式:改造页面的「雕刻刀」
核心方法:通过 doms 对象中的引用直接修改元素
// ✅ 推荐:通过 doms 对象修改样式
doms.box.style.backgroundColor = '#ff0000';
doms.box.style.transform = 'scale(1.2)';
// ✅ 推荐:批量操作子元素
function highlightLyric(index) {
const allLi = doms.lyricList.querySelectorAll('li');
allLi.forEach((li, i) => {
li.classList.toggle('active', i === index); // 使用 toggle 简化操作
});
}
| 方法 | 作用 | 常用场景 | 示例(结合 doms 对象) |
|---|---|---|---|
textContent |
设置/获取元素的纯文本内容(防XSS) | 动态显示文本 | li.textContent = '新歌词'; |
classList |
操作CSS类(add/remove/toggle) |
动态切换样式 | doms.box.classList.add('active'); |
style.property |
修改内联样式(优先级高) | 临时样式调整 | doms.box.style.width = '200px'; |
四、动态创建与插入元素:扩展页面的「生长术」
核心方法:通过 doms 对象中的容器引用动态添加元素
// ✅ 推荐:通过 doms 对象添加新元素
function addLyric(text) {
const li = document.createElement('li');
li.textContent = text;
doms.lyricList.appendChild(li); // 插入到容器末尾
}
| 方法 | 作用 | 常用场景 | 示例(结合 doms 对象) |
|---|---|---|---|
createElement() |
创建新元素 | 动态生成内容 | const li = document.createElement('li'); |
appendChild() |
将元素插入父容器末尾 | 顺序添加新内容 | doms.lyricList.appendChild(li); |
insertBefore() |
将元素插入参考元素前 | 插入到特定位置 | doms.lyricList.insertBefore(li, doms.lyricList.firstChild); |
五、事件委托:优化批量的「事件管家」
核心方法:通过 doms 对象中的父容器监听子元素事件
// ✅ 推荐:通过 doms 对象实现事件委托
doms.lyricList.addEventListener('click', (e) => {
if (e.target.tagName === 'LI') {
// 高亮被点击的歌词
e.target.classList.add('active');
}
});
| 场景 | 优势 | 示例(结合 doms 对象) |
|---|---|---|
| 动态元素 | 无需重复绑定事件 | doms.lyricList.addEventListener('click', handleClick);(父容器监听所有子元素点击) |
| 大量同类元素 | 减少内存占用 | 同上(避免为每个子元素单独绑定监听器) |
总结:黄金组合(集中管理版)
- 定位:
- 使用
doms对象集中存储所有元素引用(querySelector/querySelectorAll)
- 使用
- 交互:
- 通过
doms.xxx.addEventListener()绑定事件
- 通过
- 更新:
- 通过
doms.xxx.textContent/classList/style修改内容与样式
- 通过
- 扩展:
- 通过
createElement()+doms.container.appendChild()动态添加内容
- 通过
- 优化:
- 事件委托:通过父容器(如
doms.lyricList)统一处理子元素事件
- 事件委托:通过父容器(如
注意事项
- 确保元素存在:
// ✅ 正确做法:在 DOM 加载完成后初始化 document.addEventListener('DOMContentLoaded', () => { const doms = { audio: document.querySelector('audio'), lyricList: document.querySelector('.container ul') }; // 后续操作... }); - 动态元素处理:
- 使用事件委托处理动态添加的元素
- 避免缓存动态元素的引用(实时通过
querySelector获取)
最终代码结构示例:
// 1. 初始化 doms 对象
const doms = {
audio: document.querySelector('audio'),
lyricList: document.querySelector('.container ul'),
playBtn: document.querySelector('#playBtn')
};
// 2. 事件绑定
doms.playBtn.addEventListener('click', handlePlay);
doms.lyricList.addEventListener('click', handleLyricClick);
// 3. 功能函数
function handlePlay() {
// 使用 doms.audio 操作音频
}
function handleLyricClick(e) {
// 事件委托处理歌词点击
}
// 4. 动态添加歌词
function addNewLyric(text) {
const li = document.createElement('li');
li.textContent = text;
doms.lyricList.appendChild(li);
}

浙公网安备 33010602011771号