前端DOM操作全解:获取、修改、增删元素实战指南

作为前端开发者,DOM(文档对象模型)是我们页面交互的核心基础。简单来说,DOM就是浏览器将HTML文档解析后形成的树形对象结构,我们可以通过JS操控DOM,实现获取页面元素、修改内容样式、动态增删节点等所有页面动态效果。

很多新手写前端交互时,总会混淆各种DOM方法的使用场景,不知道什么时候该用id获取、什么时候该用选择器、如何动态增删元素。今天这篇文章,我把日常开发中所有高频DOM操作整理分类,附带精准使用场景,看完直接告别DOM操作困惑!

一、DOM获取HTML元素:6种核心方法

获取元素是所有DOM操作的前提,不同获取方法适配不同业务场景,按需选择可以让代码更简洁、性能更好。

  1. getElementById() ------ 通过ID获取唯一元素
    语法:document.getElementById('id名')
    核心特点:精准匹配页面中唯一ID的元素,返回单个元素对象,查找速度最快
    适用场景:页面独一无二的控件,比如登录按钮、弹窗盒子、倒计时容器、页面头部导航、侧边栏、首页banner等唯一模块。
  2. getElementsByTagName() ------ 通过标签名获取元素集合
    语法:document.getElementsByTagName('标签名')
    核心特点:匹配页面所有同名标签,返回HTMLCollection伪数组,支持批量操作
    适用场景:需要统一操作的同类标签元素,比如页面所有li列表、所有img图片、所有input输入框、所有span文本标签。
  3. getElementsByClassName() ------ 通过类名获取元素集合
    语法:document.getElementsByClassName('类名')
    核心特点:匹配所有拥有指定类名的元素,返回伪数组,专为样式/功能统一的元素设计
    适用场景:样式、功能一致的一组元素,比如商品卡片、分页按钮、标签选项卡、消息列表、列表条目等批量模块。
  4. getElementsByName() ------ 通过name属性获取元素集合
    语法:document.getElementsByName('name值')
    核心特点:根据元素name属性匹配,返回伪数组,专属表单元素
    适用场景:表单批量取值、状态获取,最常用于性别单选框、爱好复选框等表单场景。
  5. querySelector() ------ CSS选择器获取单个元素
    语法:document.querySelector('CSS选择器')
    核心特点:支持所有CSS选择器语法(类、id、层级、属性选择器等),只匹配第一个符合条件的元素
    适用场景:精准获取单个元素,尤其是复杂层级的嵌套元素,比如容器内的指定子元素、带特殊属性的唯一元素。
  6. querySelectorAll() ------ CSS选择器获取所有元素
    语法:document.querySelectorAll('CSS选择器')
    核心特点:匹配所有符合选择器规则的元素,返回NodeList数组,直接支持forEach遍历,写法极简
    适用场景:批量精准筛选元素,比如页面中所有.list .item列表项、所有未禁用的输入框、所有指定样式的按钮,是目前开发中最常用的批量获取方式。
    二、修改HTML元素:内容、属性、样式动态更新
    获取元素后,我们可以动态修改元素的内容、属性、样式,实现页面交互效果,以下是三种高频修改方式。
  7. innerHTML ------ 修改元素内容(支持HTML标签)
    语法:元素.innerHTML = '新内容'
    核心特点:可识别HTML标签,支持拼接文本、标签组合的富文本内容,会覆盖原有内容
    适用场景:动态生成带样式、带标签的内容,比如动态渲染图文列表、弹窗富文本内容、消息提示模块。
  8. 元素属性赋值 ------ 修改原生属性
    语法:元素.属性名 = '属性值'
    核心特点:直接修改元素原生属性,简单高效
    适用场景:图片切换(修改src属性)、超链接跳转(修改href属性)、按钮禁用状态(修改disabled属性)等原生属性更新场景。
  9. style样式赋值 ------ 动态修改行内样式
    语法:元素.style.样式名 = '样式值'
    核心特点:直接修改元素行内样式,优先级高,适合临时动态效果
    适用场景:交互触发的简单动态效果,比如点击元素变色、鼠标悬浮显示隐藏、宽高动态变化、弹窗位移等,无需编写大量CSS类的临时样式修改。
    三、DOM动态添加与删除元素
    页面静态内容无法满足交互需求,动态创建、插入、替换、删除DOM节点,是实现列表渲染、弹窗新增、内容删除的核心能力。
  10. 创建DOM节点
  • document.createElement('标签名'):创建HTML标签节点(div、p、button、li等),最常用。适用于动态生成页面结构,比如循环渲染列表项、创建弹窗、新增按钮、生成商品卡片、拼接表格行。
  • document.createTextNode('文本内容'):创建纯文本节点。适用于需要单独操作、移动、删除的文本内容,文本不与标签绑定,灵活度更高。
  • document.createAttribute('属性名'):创建属性节点,属于DOM底层标准API。多用于底层原理学习、框架底层源码解析,日常业务开发极少使用。搭配 属性节点.value = '属性值' 可给属性赋值,再通过 标签节点.setAttributeNode(属性节点) 挂载到标签上,完成完整的属性创建流程。
  1. 插入DOM节点
  • 父元素.appendChild(新节点):将新节点添加到父元素子元素末尾。最常用的追加方式,适合循环渲染列表、新增消息提示、底部追加模块、标签页新增内容等场景。
  • 父元素.insertBefore(新节点, 指定子节点):将新节点插入到指定子元素前方。适用于列表置顶、指定位置插入元素,比如在第二个li前面插入新条目、消息置顶功能。
  1. 删除与替换DOM节点
  • 父元素.removeChild(子节点):删除父元素下的指定子节点。适用于单条内容删除,比如删除列表商品、删除消息记录、关闭弹窗、移除指定标签。
  • 父元素.replaceChild(新节点, 旧节点):用新节点替换原有子节点。适用于内容更新替换,比如替换弹窗内容、更新列表条目、切换模块展示内容。
    四、DOM元素拓展获取:父子、兄弟元素查找
    开发中经常需要通过当前元素,获取关联的父子、兄弟元素,实现联动操作,以下三个拓展属性高频实用。
  • 子元素.parentElement:获取当前元素的直接父元素。常用于事件委托、点击子元素修改父容器样式、批量操作父级模块。
  • 父元素.children:获取父元素下所有直系子元素,返回伪数组。适合遍历容器内所有子项,实现批量隐藏、批量修改样式、清空列表等操作。
  • 当前元素.nextElementSibling:获取当前元素的下一个同级元素。常用于选项卡切换、表单联动提示,比如点击当前标签修改右侧标签状态、输入框聚焦后修改后方提示文案。
    五、开发总结
    DOM操作是前端JS交互的基石,不用死记硬背所有API,重点掌握场景化使用逻辑即可:
  1. 获取唯一元素:优先 getElementById / querySelector;
  2. 批量获取元素:优先 querySelectorAll(支持遍历,写法简洁);
  3. 表单元素操作:专用 getElementsByName;
  4. 动态改内容、样式、属性:按需使用 innerHTML、元素属性、style 样式;
  5. 动态渲染页面:createElement + appendChild 组合使用;
  6. 元素联动操作:灵活使用父子、兄弟元素获取属性。
    熟练掌握以上所有DOM操作,足以应对日常99%的前端页面交互需求,为后续学习框架、原生封装组件打下坚实基础!
相关推荐
鱼与宇1 小时前
前端Web(html+css+js+vue3)
前端
雪芽蓝域zzs3 小时前
(六)打包优化 + Nginx 部署完整配置 + 项目收尾
前端·vue.js
研☆香3 小时前
聊一聊前端的常见字 关键字
开发语言·前端·javascript
东风破_4 小时前
JWT 1:从一个登录请求开始,理解 React 项目里的 API 层与 Mock
前端·后端
东风破_4 小时前
JWT 3:为什么 Token 要放进 Authorization?Axios 拦截器到底解决了什么?
前端·后端
东风破_4 小时前
JWT 5:路由守卫是什么?把整个 JWT 登录鉴权流程串起来
前端·后端
东风破_4 小时前
JWT 2:HTTP 是无状态的,为什么登录成功后还要给 Token?
前端·后端
东风破_4 小时前
JWT 4:Zustand 到底解决了什么?为什么登录状态要放进 Store?
前端·后端
IT_陈寒4 小时前
Vite动态导入差点让我秃头,原来问题出在这
前端·人工智能·后端
白泽_hunter4 小时前
项目里最常见的 5 个 this 指向坑:从规则到实战彻底讲透
前端