当前位置: 首页 > news >正文

Document Object Model

DOM 全拼
Document Object Model
中文译名:文档对象模型

──────────────────
一、它到底是什么?

  1. 官方定义
    W3C 标准:DOM 是「一种与语言无关、与平台无关的接口,允许程序和脚本动态地访问和更新文档的内容、结构和样式」。
  2. 大白话
    浏览器把拿到的 HTML/CSS 文本先解析成一棵「内存树」,然后给 JavaScript 暴露出一组 API(属性和方法),让 JS 可以:
    • 查:找到某个节点(getElementByIdquerySelector …)
    • 改:改文本、属性、样式
    • 增删:插入/删除节点
    • 监听:响应事件
    这棵树 + 这套 API 就是 DOM。

──────────────────
二、为什么叫「文档对象模型」

  • Document:浏览器里的整份 HTML 文档。
  • Object:把每个标签、文本、注释都抽象成一个对象,有属性(nodeNameclassNamestyle…)和方法(appendChildaddEventListener…)。
  • Model:树形结构的「模型」,父子、兄弟关系一目了然。

──────────────────
三、DOM 树长什么样

<!doctype html>
<html><head><title>Demo</title></head><body><h1 id="title">Hello</h1><p>World</p></body>
</html>

在内存里会被解析成:

document└─ html├─ head│   └─ title│       └─ text: "Demo"└─ body├─ h1#title│   └─ text: "Hello"└─ p└─ text: "World"

──────────────────
四、核心接口速查(浏览器实现的全局构造函数)

接口作用示例
Document整棵树入口:document.title, document.createElement()
Element对应标签节点:el.classList.add(), el.getAttribute()
Text文本节点:textNode.nodeValue = '新内容'
Node所有节点共同父类:node.parentNode, node.childNodes
EventTarget事件系统根类:el.addEventListener('click', fn)

──────────────────
五、DOM 不是 HTML

  • HTML:文本字符串(磁盘或网络传来的源码)。
  • DOM:解析后的内存对象树,可以被脚本实时修改;HTML 源文件不会因此自动变化。
    (打开 DevTools → Elements 面板看到的是 DOM 树,不是原始源码。)

──────────────────
六、DOM 级别与兼容性

  • DOM Level 0:早期浏览器私有集合(document.forms, document.images…)
  • DOM Level 1/2/3/4:W3C 逐步标准化(getElementById, addEventListener, 事件流, MutationObserver…)
  • 现在统称「Living DOM」,WHATWG 持续更新。

──────────────────
七、与其他概念区分

  • BOM(Browser Object Model):windownavigatorlocation… 与浏览器窗口本身相关的对象集合。
  • Virtual DOM:React/Vue 等在 JS 内存中维护的轻量树,用来减少直接操作真实 DOM 带来的性能损耗。

──────────────────
八、常用代码片段

// 查
const title = document.querySelector('#title');// 改
title.textContent = 'Hi, DOM!';
title.style.color = 'red';// 增
const span = document.createElement('span');
span.textContent = '!';
title.appendChild(span);// 删
title.removeChild(span);

──────────────────
一句话总结
DOM 就是浏览器把 HTML 变成一棵可编程的树,并给 JavaScript 提供一套标准化 API,让我们能「用代码改写页面」。

http://www.dtcms.com/a/317857.html

相关文章:

  • 机器学习-LinearRegression
  • harbor仓库搭建(配置https)
  • MCU程序的编译与链接及格式转换
  • 防御保护防火墙简单实验报告
  • Git 乱码文件处理全流程指南:从识别到彻底清除
  • MySQL的约束条件:
  • 【Linux】调试器gdb/cgdb的使用
  • 生成式 AI 重塑自动驾驶仿真:4D 场景生成技术的突破与实践
  • vector使用模拟实现
  • 牛客AI简历筛选:破解秋招效率难题
  • 向量数据库基础入门:RAG 与向量检索基础认知构建
  • 《C语言程序设计》笔记p9
  • LLM——浅谈 LangGraph 中断式工作流:构建一个可交互的问答流程
  • 4、docker数据卷管理命令 | docker volume
  • 【关于Java的对象】
  • vue3 el-dialog自定义实现拖拽、限制视口范围增加了拖拽位置持久化的功能
  • 实战教程:从“对象文件为空“到仓库重生——修复 Git 仓库损坏全记录
  • 大数据存储域——Hive数据仓库工具
  • STM32 APP跳转后无法进入中断
  • QT----不同线程中信号发送了槽函数没反应QObject::connect: Cannot queue arguments of typeXXX
  • C++编程语言:标准库:工具类(Bjarne Stroustrup)
  • Python赋能气象与气候数据分析的生态构建与实战路径
  • Linux中systemd与systemctl管理指南
  • LlaMA_Factory实战微调VL大模型
  • 【数据分享】西藏土壤类型数据库
  • AlphaEarth模型架构梳理及借鉴哪些深度学习领域方面的思想
  • [AI 生成] Spark 面试题
  • 【深度学习】Graph Transformer Networks(GTN,图变换网络)
  • Linux 中 Git 操作大全
  • 测试单节点elasticsearch配置存储压缩后的比率