跳到主要内容
Web API 核心指南:DOM 操作与事件处理实战 | 极客日志
JavaScript 大前端
Web API 核心指南:DOM 操作与事件处理实战 综述由AI生成 系统梳理了 Web API 的核心功能,涵盖 DOM 基础认知、元素获取与内容操作、属性与样式管理、事件监听机制及节点增删改查。重点讲解了 querySelector 选择器、classList 类名控制、addEventListener 事件绑定、事件冒泡与委托原理,以及移动端触摸事件的处理。内容包含代码示例与最佳实践,旨在帮助开发者掌握前端交互逻辑的基础与进阶技巧。
云间运维 发布于 2026/4/7 更新于 2026/5/21 12 浏览Web API 核心指南:DOM 操作与事件处理实战
一、Web API 基本认知
在浏览器开发中,Web API 是一套专门用来操作网页内容的功能集合。通过 DOM(文档对象模型),我们可以将 HTML 文档视为树状结构,直接操作标签与属性,从而实现页面特效和用户交互。
DOM 对象 :浏览器根据 HTML 标签生成的 JS 对象,修改其属性会自动映射到页面上。
document :DOM 的核心对象,包含网页所有内容,提供访问和操作接口。
二、获取 DOM 对象
2.1 根据 CSS 选择器获取元素
现代开发中,推荐使用 querySelector 系列方法,它们比传统的 getElementById 更灵活。
1. 获取单个元素
使用 document.querySelector(),返回匹配的第一个元素或 null。
<!DOCTYPE html >
<html lang ="en" >
<head >
<meta charset ="UTF-8" >
<title > Document</title >
</head >
<body >
<div class ="box" > </div >
<p id ="nav" > </p >
<ul >
<li > 测试 1</li >
<li > 测试 2</li >
</ >
ul
<script >
const box = document .querySelector ('div' );
console .log (box);
const box1 = document .querySelector ('.box' );
console .log (box1);
const li = document .querySelector ('ul li:first-child' );
console .log (li);
</script >
</body >
</html >
2. 获取多个元素 使用 document.querySelectorAll(),返回 NodeList 集合。
const lis = document .querySelectorAll ('ul li' );
console .log (lis);
for (let i = 0 ; i < lis.length ; i++) {
console .log (lis[i]);
}
三、操作元素内容
innerText :获取或设置纯文本,不解析 HTML 标签。
innerHTML :获取或设置 HTML 内容,会解析标签。
const box = document .querySelector ('.box' );
box.innerText = '我是一个盒子' ;
box.innerHTML = '<strong>盒子</strong>' ;
四、操作元素属性
4.1 常用属性修改 const img = document .querySelector ('img' );
img.src = './new-image.png' ;
4.2 操作样式属性
1. 通过 style 操作 直接修改内联样式,注意 CSS 属性名需转为驼峰命名法(如 background-color 变为 backgroundColor)。
const div = document .querySelector ('div' );
div.style .width = '1000px' ;
div.style .backgroundColor = 'red' ;
2. 操作 className div.className = 'active' ;
3. 通过 classList 操作(推荐) 相比 className,classList 不会覆盖原有类名,更适合动态增删。
const box = document .querySelector ('.box' );
box.classList .add ('active' );
box.classList .remove ('box' );
box.classList .toggle ('active' );
4.3 表单元素属性 const input = document .querySelector ('input' );
console .log (input.value );
input.value = '我要买电脑' ;
4.4 自定义属性 HTML5 支持 data-* 自定义属性,JS 中通过 dataset 访问。
<div data-id ="1" data-spm ="test" > 1</div >
const one = document .querySelector ('div' );
console .log (one.dataset .id );
console .log (one.dataset .spm );
4.5 定时器 使用 setInterval 实现间歇执行,配合 clearInterval 关闭。
function fn ( ) {
console .log ('每隔一秒执行一次' );
}
const timer = setInterval (fn, 1000 );
clearInterval (timer);
五、事件处理
5.1 事件监听 事件监听让程序能检测用户行为并做出响应。相比旧式的 onclick,addEventListener 支持绑定多个监听器且不会被覆盖。
const btn = document .querySelector ('button' );
btn.addEventListener ('click' , function ( ) {
alert ('hi~' );
});
DOM L0 (on) :只能绑定一个,后绑定的会覆盖前一个。
DOM L2 (addEventListener) :可绑定多次,功能更强,推荐使用。
5.2 常见事件类型
鼠标事件 :click, mouseenter, mouseleave
焦点事件 :focus, blur
键盘事件 :keydown, keyup
文本事件 :input(实时监听输入)
const input = document .querySelector ('input' );
input.addEventListener ('input' , function ( ) {
console .log ('用户输入了:' , input.value );
});
5.3 事件对象 事件回调函数的第一个参数即为事件对象(通常命名为 e 或 event),包含触发时的详细信息。
属性 作用 type事件类型 clientX/Y光标相对于浏览器窗口的坐标 offsetX/Y光标相对于目标元素的坐标 key按键值
input.addEventListener ('keyup' , function (e ) {
if (e.key === 'Enter' ) {
console .log ('按下了回车' );
}
});
5.4 环境对象 (this) 函数内部的 this 指向当前运行上下文。在事件监听中,this 通常指向触发事件的 DOM 元素。
5.5 回调函数 当一个函数作为参数传递给另一个函数时,该函数称为回调函数。定时器中的函数就是典型的回调。
六、事件流 事件流指事件执行的完整路径,分为捕获 和冒泡 两个阶段。
捕获阶段 :从 Document 向下传递到目标元素(较少用)。
冒泡阶段 :从目标元素向上传递回 Document(默认行为)。
element.addEventListener ('click' , handler, false );
6.1 阻止冒泡 当子元素事件触发后不希望影响父元素时,需调用 stopPropagation()。
son.addEventListener ('click' , function (e ) {
e.stopPropagation ();
}, true );
6.2 解绑事件 移除已绑定的事件监听,L0 方式直接赋值为 null,L2 方式需使用 removeEventListener 且必须传入相同的引用函数。
function fn ( ) { alert ('点击了' ); }
btn.addEventListener ('click' , fn);
btn.removeEventListener ('click' , fn);
6.3 鼠标经过事件差异
mouseover/mouseout:会冒泡,可能触发多次。
mouseenter/mouseleave:不冒泡,更精准。
七、事件委托 利用事件冒泡特性,将子元素的事件监听绑定到父元素上。这样无需给每个子项单独绑定,性能更好,也方便动态添加的子元素生效。
const ul = document .querySelector ('ul' );
ul.addEventListener ('click' , function (e ) {
if (e.target .tagName === 'LI' ) {
e.target .style .color = 'red' ;
}
});
注意 :表单提交默认会刷新页面,可通过 preventDefault() 阻止。
form.addEventListener ('submit' , function (e ) {
e.preventDefault ();
});
八、其他常用事件
8.1 页面加载
load :等待所有资源(图片、CSS 等)加载完毕。
DOMContentLoaded :仅等待 HTML 解析完成,速度更快。
document .addEventListener ('DOMContentLoaded' , function ( ) {
});
8.2 滚动事件 监听 scroll 事件可检测滚动位置,常用于固定导航栏或返回顶部。
window .addEventListener ('scroll' , function ( ) {
const scrollTop = document .documentElement .scrollTop ;
if (scrollTop >= 100 ) {
}
});
8.3 尺寸变化
九、日期对象 JavaScript 的 Date 对象用于处理时间。
const date = new Date ();
console .log (date.getFullYear ());
console .log (date.getTime ());
时间戳计算 :以 1970 年 1 月 1 日为起点。倒计时算法通常为:(未来时间戳 - 当前时间戳)。
十、节点操作 DOM 树中的每一项都是节点,包括元素、属性和文本节点。
10.1 查找节点
parentNode :父节点
children :元素类型的子节点(伪数组)
nextElementSibling / previousElementSibling :兄弟节点
10.2 增加节点 使用 createElement 创建,通过 appendChild 追加,或通过 insertBefore 插入指定位置。
const li = document .createElement ('li' );
ul.appendChild (li);
克隆节点 :cloneNode(true) 包含后代节点,false 仅克隆自身。
10.3 删除节点 ul.removeChild (ul.children [0 ]);
十一、移动端事件 移动端特有的触摸事件,包括 touchstart(按下)、touchmove(移动)、touchend(离开)。
div.addEventListener ('touchstart' , function ( ) {
console .log ('手指触摸' );
});
十二、插件说明 在实际项目中,常使用成熟的插件库(如 Swiper)来快速实现轮播、滑动等效果。使用时需注意类名冲突问题,确保不同实例间互不影响。
相关免费在线工具 Keycode 信息 查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
Escape 与 Native 编解码 JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
JavaScript / HTML 格式化 使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
JavaScript 压缩与混淆 Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online