news 2026/6/10 11:08:12

玩转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操作创建一个简单的图片轮播组件。提示:你需要createElementappendChildsetAttribute和事件监听器!

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

收藏!大模型预训练技术揭秘:AI如何先建立“通用知识地图“,再精准定位任务目的地

大模型预训练技术让AI先通过海量无标注数据学习通用语言知识和世界规律&#xff0c;再针对具体任务进行微调。基于Transformer架构和注意力机制&#xff0c;预训练模型展现出强大泛化能力和少样本学习能力&#xff0c;大幅降低对标注数据的依赖。这一技术已成为当前AI革命性突破…

作者头像 李华
网站建设 2026/6/10 1:03:08

科研人必藏!斯坦福大学都在用的五款学术搜索AI大模型,精准检索文献和深度综述轻松搞定

面对堆积如山的学术文献,纯靠手动一篇一篇筛选,往往耗时费力。而传统的检索工具又很难精准定位核心内容,跨学科研究时更是无从下手。为了帮助广大科研人提高科研效率,今天我整理出了斯坦福大学都在用的 5 款学术搜索AI大模型即SciSpace、Consensus、Ask R Discovery、Ai2 P…

作者头像 李华
网站建设 2026/6/10 8:53:54

手把手教你玩转 Docker:Spring Boot 项目容器化实战指南

视频看了几百小时还迷糊&#xff1f;关注我&#xff0c;几分钟让你秒懂&#xff01;&#x1f9e9; 一、为什么我们要用 Docker&#xff1f;在开发 Spring Boot 应用时&#xff0c;你是否遇到过这些问题&#xff1a;“在我本地能跑&#xff0c;怎么部署到服务器就挂了&#xff1…

作者头像 李华
网站建设 2026/6/10 9:02:03

揭秘Docker容器并发瓶颈:如何通过限流策略提升系统稳定性

第一章&#xff1a;揭秘Docker容器并发瓶颈&#xff1a;从现象到本质在高并发场景下&#xff0c;Docker容器常表现出响应延迟、吞吐量下降等性能问题。这些现象背后往往隐藏着资源隔离不彻底、I/O争抢或网络栈瓶颈等深层原因。理解这些限制因素是优化容器化系统性能的前提。典型…

作者头像 李华
网站建设 2026/6/10 9:03:18

Webpack打包优化建议:VibeThinker分析chunk分割策略

Webpack打包优化建议&#xff1a;VibeThinker分析chunk分割策略 在现代前端工程中&#xff0c;一个看似不起眼的构建配置&#xff0c;往往能决定用户是否愿意等待页面加载完成。尤其当应用涉及AI模型推理这类高交互、低延迟的场景时&#xff0c;前端资源的组织方式不再只是“打…

作者头像 李华