news 2026/5/23 9:42:52

JavaScript DOM 核心操作(DOM Manipulation)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JavaScript DOM 核心操作(DOM Manipulation)

本文是JavaScript DOM 核心权威教程,涵盖 DOM 树、节点选择、遍历、增删改查、属性、样式、事件、渲染流程与性能优化。


一、什么是 DOM?

DOM(文档对象模型)是浏览器将 HTML 解析成的对象化树形结构,是 JavaScript 操作页面的唯一接口。

  • DOM ≠ HTML 源码(浏览器会自动修复标签)
  • DOM ≠ 渲染树(不含隐藏元素)
  • DOM ≠ 开发者工具显示(包含伪元素)
// DOM 可以直接做这些事 document.querySelector('h1').textContent = 'Hello DOM' document.body.style.background = 'lightblue' btn.addEventListener('click', handleClick)

二、DOM 树结构

DOM 像家族树

  • document→ 树根
  • <html>→ 根元素
  • <head>,<body>→ 子节点
  • 元素、文本、注释都是节点(Node)

节点类型(必记)

  • 元素节点:1<div>
  • 文本节点:3— 文字 / 空格 / 换行
  • 注释节点:8<!-- -->
  • document:9
  • 文档片段:11

三、获取 DOM 元素(最常用 API)

1. 快速选择

  • document.getElementById(id)→ 最快
  • document.querySelector(css)→ 返回第一个
  • document.querySelectorAll(css)→ 返回所有(静态 NodeList)

2. 动态集合(实时更新)

  • getElementsByClassName
  • getElementsByTagName

区别:querySelectorAll静态快照getElementsByClassName实时集合


四、DOM 树遍历(父子兄弟)

向下(子元素)

  • elem.children→ 只取元素节点(推荐)
  • elem.childNodes→ 所有节点(含文本 / 空格)
  • elem.firstElementChild
  • elem.lastElementChild

向上(父元素)

  • elem.parentElement
  • elem.closest(css)→ 向上找最近匹配祖先(超级常用)

横向(兄弟)

  • elem.previousElementSibling
  • elem.nextElementSibling

五、创建、插入、删除、克隆元素

1. 创建

const div = document.createElement('div') const text = document.createTextNode('hello')

2. 插入

  • parent.appendChild(elem)→ 最后
  • parent.insertBefore(new, ref)→ 前面
  • elem.append()/prepend()→ 现代用法
  • elem.before()/after()→ 兄弟插入
  • elem.insertAdjacentHTML(position, html)→ 快速插入 HTML

3. 删除

  • elem.remove()
  • parent.removeChild(elem)

4. 克隆

  • elem.cloneNode(false)→ 浅克隆
  • elem.cloneNode(true)→ 深克隆(常用)

5. 批量插入(高性能)

使用DocumentFragment只触发一次重排

const frag = document.createDocumentFragment() for (...) { frag.appendChild(li) } ul.appendChild(frag)

六、内容操作(innerHTML /textContent/innerText)

1. innerHTML

读取 / 写入 HTML →有 XSS 风险

elem.innerHTML = '<strong>Hi</strong>'

2. textContent(推荐)

纯文本,安全、最快

elem.textContent = '<script>alert(1)</script>' // 原样显示

3. innerText

受 CSS 影响,会触发重绘,


七、属性 vs 属性节点(Attributes vs Properties)

Attribute(HTML 源码里的)

elem.getAttribute('id') elem.setAttribute('value', '123')

Property(DOM 对象实时状态)

elem.id elem.value elem.checked

重点:input.value(实时)≠getAttribute('value')(初始值)

dataset(自定义 />

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

pprint,一个漂亮打印的 Python 库!

在日常编程中&#xff0c;我们经常需要打印复杂的数据结构——嵌套的字典、列表、JSON 响应、配置对象等。使用普通的 print() 会将整个结构挤在一行或简单换行&#xff0c;导致可读性极差&#xff0c;尤其是在调试多层嵌套的 API 返回数据时&#xff0c;简直是一场灾难。pprin…

作者头像 李华
网站建设 2026/5/23 9:35:47

3步掌握WeChatExporter:永久备份微信聊天记录的终极方案

3步掌握WeChatExporter&#xff1a;永久备份微信聊天记录的终极方案 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否曾因手机丢失或更换设备而痛失珍贵的微信聊天记…

作者头像 李华
网站建设 2026/5/23 9:34:44

抖音下载神器:如何免费批量下载无水印视频、音乐和图片

抖音下载神器&#xff1a;如何免费批量下载无水印视频、音乐和图片 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback supp…

作者头像 李华
网站建设 2026/5/23 9:31:29

3步构建专业中文排版系统:Source Han Serif CN实战指南

3步构建专业中文排版系统&#xff1a;Source Han Serif CN实战指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是否曾为中文排版的美观性和专业性而烦恼&#xff1f;面对复杂的商…

作者头像 李华
网站建设 2026/5/23 9:31:20

Steam创意工坊模组下载神器:WorkshopDL终极免费指南

Steam创意工坊模组下载神器&#xff1a;WorkshopDL终极免费指南 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 还在为跨平台游戏无法使用Steam创意工坊模组而烦恼吗&#xff1…

作者头像 李华