1. 核心定义

  • 专业术语
    文档对象模型。它是一个跨平台语言中立的接口,允许程序(如JavaScript)动态地访问和更新文档的内容、结构和样式。它将HTML或XML文档表示为节点树结构。

  • 大白话
    浏览器把你写的那些乱七八糟的HTML代码(一堆标签)读进去之后,把它变成一个活的对象模型。这个模型就像一张地图,把网页上的每一个元素(按钮、图片、文字)都变成了一个对象。你想改网页上的什么东西,不需要去改原文件,只需要操作这些对象就行。

  • 生活案例
    这就像买了一个“乐高”积木套装

    • HTML源码 = 那本厚厚的、静态的说明书。上面写着“步骤1:把2x4的砖块放在这里”。
    • DOM = 你按照说明书拼好的那个立体模型。这个模型是活的,你可以随时拔掉它的头,给它换个胳膊,或者把它拆了重拼。
    • 操作DOM = 你的在模型上操作,想拔哪个零件就拔哪个。

2. 数据结构

  • 专业术语
    DOM树。一个树形结构,根节点是document对象,其余节点(元素节点、文本节点、属性节点等)通过父子兄弟关系层级排列。

  • 大白话
    网页不是一坨平铺的文字,而是一棵倒着长的大树。最上面的根叫document<html>是大树干,<head><body>是分叉,<div>是树枝,文字是树叶。你要找某个树叶,就得顺着树干、树枝一路找下去。

  • 生活案例
    就像你家的族谱

    • :祖宗。
    • 父节点:你爷爷。
    • 子节点:你爸爸、你叔叔。
    • 兄弟节点:你和你堂哥。
    • DOM也是这样,一个<div>里面套着一个<p>,那<p>就是<div>的儿子。你没法让孙子辈的标签跨越层级直接成为根,就像你没法让你侄子管你叫爸一样,结构是固定的。

3. 为什么要有 DOM?

  • 专业术语
    静态文档转换为动态可编程的资源。DOM提供了API(应用程序编程接口),使得JavaScript可以监听事件、修改属性、增删节点,从而实现交互效果。

  • 大白话
    因为HTML自己“不会动”。如果没有DOM,你做出来的网页就是个Word文档,只能看,点哪儿都没反应。有了DOM,浏览器把HTML交给你来控制,你想让那个按钮点击后变红,或者把图片换成另一张,就能通过这些接口去实现。

  • 生活案例
    还是用乐高模型
    如果只有乐高说明书(HTML),模型是死的,你只能看。
    DOM 就是把模型放在了一个智能工作台上,工作台给你提供了一把镊子和一管胶水(这就是API)。

    • 你想把红色积木换成蓝色?用镊子夹走红色,放上蓝色。
    • 你想让模型眨眼睛?胶水粘个眼睛上去。
      这就是JavaScript通过DOM操作网页的原理。

4. 关键误区:DOM 不等于 HTML

  • 专业术语
    HTML是静态源码,DOM是解析后的内存表示。当浏览器解析HTML时,会构建DOM树,两者在结构上可能不一致(例如浏览器自动修复缺失的闭合标签,或JavaScript动态修改了DOM)。

  • 大白话
    你写的代码浏览器实际运行的模型,是两码事。
    你可以写一个空的<div>,然后通过JavaScript往里面塞了10个按钮。这时候你去右键点击“查看网页源代码”,看到的还是那个空的<div>;但是你去“检查元素”(看DOM),里面已经有10个按钮了。

  • 生活案例
    就像你去买房

    • HTML = 户型图。交房前,图纸上画着这里有个墙,那里有个门。
    • DOM = 实际装修好的房子
      你在入住后(JavaScript运行时),把那面墙砸了(修改DOM)。现在房子(DOM)已经没有墙了,但你的户型图(HTML源码)上还画着那面墙。所以,我们平时做网页开发,改的是“房子”(DOM),而不是“户型图”(HTML文件)。

总结

DOM 就是浏览器把死板的文本代码(HTML),变成活灵活现、可以随意增删改查的对象模型的过程。

你可以把它理解为网页的**“骨架结构”“操作权限”**——没有它,网页就是一张照片;有了它,网页就成了一个可以交互的应用程序。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐