DOM文档对象模型|JS操作页面交互核心API

一、DOM基础概念与DOM树

浏览器解析HTML文档,会把整个页面转化为一棵DOM树。页面中标签、文本、注释全部转换为树上的节点对象,JS通过API访问、修改这些节点。

  • document:文档根节点,DOM的入口对象

  • 元素节点:html、body、div、p、span等标签

  • 文本节点:标签内部的文字内容

  • 属性节点:标签上的id、class、src、data‑*等属性

⚠️ JS代码执行时机:HTML还没解析完成就获取元素,会得到 null。


二、获取DOM元素

操作页面第一步:选中页面目标元素,常用几套API。

复制代码

// 根据id获取,返回单个元素对象 let box = document.getElementById("box"); // CSS选择器获取匹配第一个元素,开发最常用 let item = document.querySelector(".list-item"); // CSS选择器获取全部匹配元素,返回NodeList集合 let listArr = document.querySelectorAll(".list-item"); // 根据类名获取,返回HTMLCollection集合 let clsBox = document.getElementsByClassName("box");

注意:querySelectorAll 返回节点集合,不能直接调用元素方法,必须循环遍历取出每一项。


三、读取修改元素内容

复制代码

let box = document.querySelector(".box"); // innerText:读写纯文本,不会解析HTML标签 box.innerText = "普通文本内容"; // innerHTML:读写内容,可以解析HTML标签 box.innerHTML = "<span style='color:red'>红色文字</span>";

  • innerText:只处理文本,自动忽略标签,安全性高

  • innerHTML:支持渲染标签,存在XSS注入风险,用户输入内容禁止直接赋值


四、元素属性操作

原生标签属性

复制代码

let img = document.querySelector("img"); // 读取属性 console.log(img.src); // 修改属性 img.src = "demo.png"; img.alt = "示例图片";

data‑* 自定义属性(存储业务数据)

复制代码

<div data‑id="1001" data‑title="测试标题"></div>

复制代码

let div = document.querySelector("div"); console.log(div.dataset.id); console.log(div.dataset.title);


五、样式与类名操作

方式一:直接操作行内style,CSS属性转为驼峰命名

复制代码

let box = document.querySelector(".box"); box.style.width = "200px"; box.style.backgroundColor = "#409eff";

方式二:classList 操作类名(工程开发首选)

复制代码

let box = document.querySelector(".box"); box.classList.add("active"); // 添加类 box.classList.remove("active"); // 删除类 box.classList.toggle("active"); // 切换类,有则删、无则加 box.classList.contains("active"); // 判断是否拥有该类,返回布尔值


六、节点创建、追加、删除

复制代码

// 创建新元素节点 let newDiv = document.createElement("div"); newDiv.innerText = "动态创建的元素"; // 获取父容器 let wrap = document.querySelector(".wrap"); // 末尾追加子节点 wrap.appendChild(newDiv); // 删除子节点(父调用) wrap.removeChild(newDiv); // 元素自身删除 newDiv.remove();


七、DOM事件基础

事件:监听用户行为(点击、移入、输入、滚动等),行为触发执行JS逻辑。addEventListener标准绑定方式。

复制代码

let btn = document.querySelector("button"); btn.addEventListener("click", function (e) { console.log("按钮被点击"); // e 事件对象,保存本次事件全部信息 });

高频常用事件:

  • click:鼠标单击

  • mouseenter / mouseleave:鼠标移入移出

  • input:表单输入实时触发

  • scroll:页面滚动事件

事件对象与事件冒泡

事件会从触发的子节点向上传递到父节点、祖先节点,称为事件冒泡。可以调用方法阻止冒泡传递。

复制代码

btn.addEventListener("click", function (e) { e.stopPropagation(); // 阻止事件冒泡 });


八、DOM开发注意要点

  • JS写在HTML前面时,使用DOMContentLoaded等待页面解析完成
复制代码

document.addEventListener("DOMContentLoaded", function () { // 此处执行获取元素DOM操作 });

  • DOM操作性能开销大于普通JS逻辑,减少频繁循环DOM修改

  • 优先classList切换类,少大量直接操作style行内样式

  • innerHTML谨慎使用,防止XSS脚本注入安全问题

相关推荐
Flynt30 分钟前
我把热榜那篇"禁用 axios"逐条实测了一遍:结论大体对,坑在它没讲的地方
前端·javascript·axios
Csvn1 小时前
bundle优化
前端
slongzhang_2 小时前
linux 递归删除源码文件|递归删除目录下 *.js,但排除 *.min.js
linux·开发语言·javascript
北冥有鱼2 小时前
发版后动态路由点击报 `Failed to fetch dynamically imported module`」问题上的完整排查与修复过程
前端·vue.js
静默回滚2 小时前
视频压到 25 MB 以内,码率要算、音轨要扣、余量要留
前端
用户37203749260182 小时前
把 10MB 中文语义模型塞进浏览器:STSB 做到教师模型的 93%,但线上 top1 只有 42%
前端
光锥智能2 小时前
海康机器人举行2026移动机器人新品发布会:箱式存拣升级,「明智」系列发布
java·前端·机器人
计算机魔术师2 小时前
Anthropic 上市文件最吓人的一幕,不是亏损 807 亿
前端
alsmile2 小时前
AI友好的可视化图形引擎自我革命:Meta2d.js 2.0 历时一年全新重写,性能与多人协作全面升级
前端·开源·数据可视化
行思理2 小时前
Nginx 跨站请求(CORS)配置完全指南:从原理到生产实践
java·前端·nginx