news 2026/10/29 7:41:44

玩转DOM:像玩乐高一样操作网页元素

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
玩转DOM:像玩乐高一样操作网页元素

你以为前端只是写写样式?DOM操作才是让网页“活”起来的魔法!

🎯 什么是DOM?

想象一下,你在玩乐高积木。每个积木块就像网页上的一个元素(按钮、图片、文字等),而**DOM(文档对象模型)**就是这份乐高搭建说明书,告诉浏览器如何组织这些积木。

// 简单说:DOM是HTML的编程接口// HTML是静态的代码,DOM是动态的对象树

🌳 DOM树:网页的家族图谱

每个网页都是一棵倒置的“家族树”:

  • <html>是爷爷
  • <body>是爸爸
  • <div>、<p>是孩子们
  • 文本和属性是孙辈们
<!-- 看这个简单的HTML --><html><head><title>我的网站</title></head><body><divid="app"><h1>欢迎!</h1><button>点击我</button></div></body></html>

对应的DOM树是这样的:

Document

html

head

body

title

文本: '我的网站'

div#app

h1

button

文本: '欢迎!'

文本: '点击我'

🛠️ DOM操作四板斧

1️⃣查找元素:找到你要操作的积木

// 方法一:按ID找(最精确)constappDiv=document.getElementById('app');// 方法二:按CSS选择器找(最常用)consttitle=document.querySelector('h1');constbuttons=document.querySelectorAll('button');// 方法三:按类名找constitems=document.getElementsByClassName('item');// 方法四:按标签名找constdivs=document.getElementsByTagName('div');

2️⃣修改内容:给积木换颜色

// 改文本title.textContent='你好,世界!';title.innerHTML='<span>你好</span>,世界!';// 可以包含HTML// 改样式appDiv.style.backgroundColor='skyblue';appDiv.style.fontSize='20px';// 改属性constimg=document.querySelector('img');img.setAttribute('src','new-image.jpg');img.alt='新图片';

3️⃣增删元素:添加或移除积木

// 创建新元素constnewButton=document.createElement('button');newButton.textContent='我是新的!';// 添加到页面appDiv.appendChild(newButton);// 加在最后appDiv.insertBefore(newButton,title);// 插在title前面// 移除元素appDiv.removeChild(title);// 移除标题newButton.remove();// 更简单的方法

4️⃣事件处理:让积木“活”起来

// 添加点击事件newButton.addEventListener('click',function(event){console.log('按钮被点了!');this.style.backgroundColor='red';// 事件冒泡:从内到外传递event.stopPropagation();// 阻止冒泡});// 常见事件类型// click - 点击// mouseenter/mouseleave - 鼠标进出// keydown/keyup - 键盘按下/松开// submit - 表单提交// load - 页面加载完成

🔄 DOM操作完整流程图

开始DOM操作

第一步:查找元素

getElementById
最精确

querySelector
最灵活

其他选择器

第二步:要做什么?

修改内容/样式

添加/删除元素

添加事件监听

更新界面

用户交互

完成!

🚀 实战:创建动态待办清单

让我们用DOM操作做一个简单的待办事项应用:

<!DOCTYPEhtml><html><head><style>.completed{text-decoration:line-through;color:gray;}li{margin:10px 0;cursor:pointer;}</style></head><body><h2>我的待办清单</h2><inputid="todoInput"type="text"placeholder="输入新任务"><buttonid="addBtn">添加</button><ulid="todoList"></ul><script>consttodoInput=document.getElementById('todoInput');constaddBtn=document.getElementById('addBtn');consttodoList=document.getElementById('todoList');// 添加任务addBtn.addEventListener('click',()=>{consttaskText=todoInput.value.trim();if(taskText){addTodoItem(taskText);todoInput.value='';// 清空输入框}});// 按回车也可以添加todoInput.addEventListener('keypress',(e)=>{if(e.key==='Enter')addBtn.click();});functionaddTodoItem(text){// 创建列表项constli=document.createElement('li');li.textContent=text;// 点击标记完成/未完成li.addEventListener('click',function(){this.classList.toggle('completed');});// 添加删除按钮constdeleteBtn=document.createElement('button');deleteBtn.textContent='删除';deleteBtn.style.marginLeft='10px';deleteBtn.addEventListener('click',function(e){e.stopPropagation();// 阻止触发li的点击事件this.parentElement.remove();});li.appendChild(deleteBtn);todoList.appendChild(li);}// 添加示例任务addTodoItem('学习DOM操作');addTodoItem('写博客文章');addTodoItem('喝杯咖啡休息一下');</script></body></html>

💡 性能小贴士

  1. 减少DOM操作次数:多次操作合并成一次

    // 不好:操作了3次DOMelement.style.color='red';element.style.fontSize='20px';element.style.margin='10px';// 好:只操作1次element.style.cssText='color: red; font-size: 20px; margin: 10px;';
  2. 使用文档片段:批量添加元素时

    constfragment=document.createDocumentFragment();for(leti=0;i<100;i++){constli=document.createElement('li');li.textContent=`项目${i}`;fragment.appendChild(li);}list.appendChild(fragment);// 只触发一次重排
  3. 事件委托:减少事件监听器数量

    // 不好:每个按钮都加监听器buttons.forEach(btn=>btn.addEventListener('click',handleClick));// 好:父元素一个监听器搞定container.addEventListener('click',function(e){if(e.target.tagName==='BUTTON'){handleClick(e.target);}});

🎓 总结

DOM操作就像是给网页赋予生命的魔法:

  • 查找是找到正确的积木
  • 修改是调整积木的外观
  • 增删是搭建或拆除结构
  • 事件是让积木能响应用户

记住:DOM操作是昂贵的(性能角度),所以要聪明地使用它。就像真正的乐高大师,知道何时快速搭建,何时精心调整。

现在,去创造属于你的动态网页吧! 🚀


动手挑战:用纯DOM操作创建一个简单的图片轮播组件。提示:你需要createElement、appendChild、setAttribute和事件监听器!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/28 14:24:42

AI Agent 与 Agentic AI 系统:真正的区别是什么?

大多数人把这两个词混用——但一个负责执行任务&#xff0c;另一个旨在达成目标。教你如何区分&#xff08;以及各自的适用场景&#xff09;。先来澄清当下 AI 讨论中最常见的一处混淆。 你可能经常看到大家把“AI agent”和“agentic AI system”当成同一件事。但事实是&#…

作者头像 李华
网站建设 2026/10/25 4:07:16

eBPF在Docker中部署难?掌握这6步安装流程,效率提升300%

第一章&#xff1a;eBPF与Docker集成的核心价值eBPF&#xff08;extended Berkeley Packet Filter&#xff09;是一种在Linux内核中运行沙盒化程序的高效机制&#xff0c;无需修改内核代码即可实现性能分析、安全监控和网络优化等功能。当eBPF与Docker容器环境集成时&#xff0…

作者头像 李华
网站建设 2026/10/22 19:32:34

全网最全专科生AI论文平台TOP9:开题报告文献综述必备

全网最全专科生AI论文平台TOP9&#xff1a;开题报告文献综述必备 2026年专科生AI论文平台测评&#xff1a;为何值得一看 随着人工智能技术在学术领域的不断渗透&#xff0c;越来越多的专科生开始依赖AI写作工具来提升论文撰写效率。然而&#xff0c;面对市场上五花八门的平台&a…

作者头像 李华
网站建设 2026/10/27 20:10:12

手把手教你 Linux 服务器和 Windows 安装 Docker 环境(附避坑指南)

视频看了几百小时还迷糊&#xff1f;关注我&#xff0c;几分钟让你秒懂&#xff01; &#x1f9e9; 一、为什么要在服务器上装 Docker&#xff1f; 你是不是经常遇到这些问题&#xff1a; 开发环境跑得好好的&#xff0c;部署到服务器就“水土不服”&#xff1f;想快速部署多…

作者头像 李华
网站建设 2026/10/29 0:18:23

进化算法求解约束多目标优化问题【附代码】

✅ 博主简介&#xff1a;擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导&#xff0c;毕业论文、期刊论文经验交流。✅成品或者定制&#xff0c;扫描文章底部微信二维码。(1) 基于分解的自适应约束处理二三目标差分进化算法约束多目标优化问题在工程设计和科…

作者头像 李华