HTML-DOM树篇

article/2025/10/31 21:45:06

一、什么是DOM

DOM(Document Object Model) 文档对象模型,是HTML和XML文档的编程接口

  • DOM 以树结构表达 HTML 文档,树的每个分支的终点都是一个节点,每个节点都包含着对象
  • DOM 将web页面与脚本或编程语言链接起来,可以通过DOM提供的方法改变节点的结构、样式或者内容。

二、为什么要介绍DOM树?

DOM树是浏览器标记内部的表示,浏览器接收到网络数据后的第一步就是 处理HTML标记并构建DOM树。

三、DOM树的构建

  • DOM树是一种有限层次的树结构,树顺序由HTML文档决定的
  • 参与树的最小单位是对象(节点),如果该对象的父对象(父节点)为null,那么该对象(节点)就是DOM树的根;对象可以具有子对象(子节点),这是一个有序的对象集

通过菜鸟教程的一张图片来分析一下DOM树

 

  • Document 根节点(有些文档说Document是根节点,也有些文档说 html元素是 根节点。从对象的角度上来看,Document是根对象,从元素的角度上看,html元素由于父元素是null,所以是根元素);
  • html 元素,html元素的父元素为null,所以从元素的角度来说是树的根;
  • head 元素 和 body 元素 都是 html 根元素的子元素。所以树对象(节点)可以具有子对象(子节点);
  • href属性 是 a 元素的子对象(子节点),所以DOM树包含属性对象(属性节点);
  • text文本 是 title元素 的子对象(子节点),所以DOM树包含文本对象(文本节点);
  • a元素 的 父对象 是 body元素,body元素的 父对象 是 html元素,所以html元素 是 a元素的祖先对象(祖先节点);
  • a元素 和 h1元素 都是 body元素的子对象(子节点),所以 a元素 和 h1元素是兄弟对象(兄弟节点);
  • 图中没有提到 注释节点,但是注释也是DOM树的一部分;

四、怎么解析文档从而构建DOM树

  • 解析的过程可以分成两个子进程:词法分析和语法分析
  • 词法分析是将输入内容分割成大量标记(如:html、body等)的过程。标记是语言中的词汇,构成内容的基本单位。
  • 语法分析是引用语言的语法规则的过程(如html 超文本标记语言)。
  • 词法分析器(又称标记生成器),负责将输入的文档内容分解成一个个有效标记,然后解析器负责根据语言(html)语法规则分析文档的结构,从而构建解析树(DOM树)。

4-1 词法分析器

<html><body><p>Hello world</p></body>
</html>
  • 初始化是数据状态
  • 遇到 < 字符时,将状态改成“标记打开状态
  • 然后接收 a-z或A-Z字符就会创建“起始标记”,状态变成“标记名称状态
  • 然后直到接收到 > 字符,在标记名状态期间接受的每个字符都会附加到新的标记名称上(如上述代码中的html)
  • 接收到 > 字符,会发送当前的标记,状态改成“数据状态
  • body 和 p 都会执行上面 4 个步骤。
  • 接收 Hello world 中的 H 字符时,将创建并发送字符标记,直到接收到 </p> 的 < 字符,在这个过程中每个字符都会发送一个字符标记
  • 接收到 < 字符就又回到 “标记打开状态
  • 当在 “标记打开状态”接收到 / 字符时,会创建 end tag token,并将状态改为“标记名称状态”,后面就跟上述一样了。

4-2 树的构建

  • 创建解析器的同时,会创建Document对象。
  • 词法分析器(标记生成器)发送的每个节点都会由树构建器进行处理,并添加到DOM树上
  • 在添加到DOM树的同时还会添加到开发元素的堆栈中(用来纠正嵌套错误和处理未关闭的标记)

树构建阶段输入的是一个来自标记化阶段的标记序列

  1. 初始模式“initial mode
  2. 接收到HTML标记后转成“before html”模式,并处理html标记,创建HTMLHtmlElement元素,并将其添加到Document对象上
  3. 然后将状态改成“before head”,按照上面的示例此时应该接收到“body”标记,如果没有接收到head标记,系统会隐式创建一个HTMLHeadElement元素,并添加到树中
  4. 然后进入“in head”,然后转为“after head”模式。此时系统才会对“body”标记尽进行处理,并创建HTMLBodyElement元素,同时进入“in body”模式
  5. 然后接收 p 标记 进入“in p”状态,并同时创建HTMLParagraphElement元素。
  6. 接收到由“Hello world”字符串生成的一系列字符标记。接收到第一个字符时会创建并插入“Text”节点,其他字符会附加到这个节点上。
  7. 然后接收p结束标记转成“after p”模式,然后收到body结束标签转成“after body”模式
  8. 接收到HTML结束标记时会进入“after after body”模式。解析过程也就到此结束了。

可以在HTML5 规范中查看标记化和树构建的完整算法


http://chatgpt.dhexx.cn/article/BdHu4Kdg.shtml

相关文章

DOM结构(DOM树)

DOM 文档类型DOM&#xff08;Document Object Model&#xff09;主要用于HTML文档和XML文档的内容进行操作。DOM描绘了一个层次化的节点树&#xff0c;通过节点的操作&#xff0c;来实现对文档内容进行增删改查。 1.DOM&#xff08;Document Object Model&#xff09;&#x…

DOM(一)概述、dom树、查找元素

目录 一、DOM 概述 二、DOM树 二、查找元素 1. 无需查找的元素 2. 按节点间关系查找 3. 按 HTML 特征查找 三、案例&#xff1a;通过DOM实现购物车效果 一、DOM 概述 DOM全称 Document Object Model&#xff0c;是专门操作网页内容的一套对象和函数的总称。由于 ES 标准…

DOM深入学习 --- DOM 树介绍,如何遍历 DOM 树节点(一)

DOM 树 HTML 文档的主干是标签&#xff08;tag&#xff09;。 根据文档对象模型&#xff08;DOM&#xff09;&#xff0c;每个 HTML 标签都是一个对象。嵌套的标签是闭合标签的“子标签&#xff08;children&#xff09;”。标签内的文本也是一个对象。 所有这些对象都可以通…

什么是DOM?你了解DOM树吗?

在找工作的过程中&#xff0c;看到了招聘信息上有写这么一条信息&#xff1a; 掌握WEB前端开发技术&#xff1a;JavaScript(含ES6)、HTML、CSS、DOM等 看见这条信息我心里安心了不少&#xff0c;都是一些基础问题&#xff0c;但是乍一看DOM&#xff0c;脑子有点短路了&#x…

Windows命令:CHCP

CHCP 用途一&#xff1a;Windows操作系统默认编码格式是GBK&#xff08;963&#xff09;&#xff0c;cmd窗口编码方式设置为UTF-8方法&#xff1a; 临时修改方案&#xff1a;CHCP 65001永久修改方案&#xff1a;参考资料&#xff1a;https://jingyan.baidu.com/article/d71306…

查看windows操作系统的默认编码(字符集)-chcp

在windows cmd 模式下&#xff0c;输入命令 &#xff1a; chcp 如上图&#xff0c;我的活动代码页为936&#xff0c;意思是"中国-简体中文(GB2312)" 说明&#xff1a;代码页是“字符集编码”的别名&#xff0c;也有人称为“内码表”。 下表列出了所有支持的代码页…

解决‘chcp’不是内部或外部命令,也不是可运行的程序或批处理文件

解决方法&#xff1a; 此电脑\系统属性\高级系统设置\环境变量 在系统变量点击path&#xff0c;变量值改为Anacondad的安装路径加 &#xff1b;C:\Windows\System32 即可解决注意添加; 有什么问题可私信我 附图&#xff1a;

meterpreter里面cmd乱码解决方法chcp 65001

当我们使用meterpreter反弹shell后使用是乱码时 可以采用如下命令解决 chcp 65501 chcp是一个计算机指令&#xff0c;能够显示或设置活动代码页编号。 65001 UTF-8代码页 950 繁体中文 936 简体中文默认的GBK 437 MS-DOS美国英语

win10 命令行工具cmd乱码解决方案及cmd非常用命令chcp介绍

问题发生前景&#xff1a; 在使用好压压缩命令批量添加压缩文件的时候产生&#xff0c;中文路径或者文件名中文都是乱码&#xff0c;一堆问号。后来查了一些资料&#xff0c;发现命令行工具能够设置编码格式。具体操作如下&#xff1a; 在cmd或者powershell中执行命令 chcp …

msf拿到shell显示乱码解决方法以及chcp各种编码的补充

文章目录 前言 前言 msf拿到shell之后输入命令经常会有乱码&#xff0c;只需要一条命令就能解决。 chcp 65001 chcp 65001 的意思是 &#xff1a;改变当前活动代码页为 UTF-8&#xff0c;让当前的批处理窗口支持 UTF-8 格式的文件。 改变当前 cmd 窗体的活动代码页&#xff0…

【cmd】windows 控制台cmd乱码的解决办法 chcp 65001

本机的系统环境&#xff1a; OS Name: Microsoft Windows 10企业版 OSVersion: 10.0.14393 N/A Build 14393 有时在cmd中输出的中文乱码 解决办法如下&#xff1a; 在cmd中输入CHCP 65001 按Enter键 然后查看不再乱码 注&#xff1a;CHCP是一个计算机指令&#xff0c;能够…

解决CMD编码格式CHCP65001 UTF-8导致Robotframework运行用例失败

运行环境 WIN10系统 Robot Framework 6.0.2 (Python 3.7.9 on win32) 安装命令 // 通过pip安装robotframeworkpip install robotframework pip install robotframework-ride python -m robotide.__init__ 运行demo测试用例 写了一个最简单的测试用例&#xff0c;结果运行…

windows控制台命令窗口中文乱码chcp 65001

1.打开CMD.exe命令行窗口&#xff0c;默认情况下&#xff0c;编码为936&#xff08;简体中文 GBK编码&#xff09;。 2.通过chcp命令改变代码页&#xff0c;chcp 65001。(65001为UTF-8的代码页) 修改以前的编码936&#xff0c;该编码只能显示GBK编码的中文&#xff1a; 修改后…

用CHCP命令切换CMD中英文帮助

如果你想查看CMD某个命令帮助说明&#xff0c;结果显示为英文&#xff0c;英文不好看起来又很累。那么chcp 命令可以帮你切换字符格式 命令介绍&#xff1a; CHCP [nnn]nnn 指定代码页编号。不带参数键入 CHCP 以显示活动代码页编号。常用代码 代码语言65001UTF-8936中文G…

【求助】Executing transaction: | menuinst ExceptionTraceback (most recent call last): File “C:\Program

本人用anaconda的prompt更新东西时&#xff0c;系统给出以下提示&#xff1a; Executing transaction: | menuinst Exception Traceback (most recent call last): File "C:\ProgramData\Anaconda3\lib\site-packages\conda\gateways\disk\create.py", line 246, …

chcp编码大全

字符集 *号标记的是cmd中包含的字符集&#xff0c;其它的不能使用 查看当前字符集&#xff1a;chcp 执行下面的命令可以修改cmd窗口的字符集&#xff0c;例如&#xff1a;修改为utf-8 chcp 65001 注意&#xff1a;win10系统上面这种修改方式不是永久有效的 CodePageidentifi…

DOS命令:chcp

chcp是命令提示符中的一个可执行命令&#xff0c;在命令提示符中运行&#xff0c;可以返回活动代码页的编码&#xff0c;还可以设置当前的活动代码页。 chcp /? ---查看官方帮助文档对CHCP的解释说明 1、在命令提示符中输入chcp命令&#xff0c;显示当前活动代码页编码&#…

网页脚本编程学习笔记

网页脚本编程学习笔记 1、配置 此处以火狐浏览器为例&#xff1a; 1&#xff09;、 打开web控制台&#xff0c;调出查看器&#xff08;用于查看该网页的HTML源代码&#xff09;、控制台&#xff08;编写控制代码&#xff0c;可以实时操作&#xff0c;显示运行结果、报错&am…

在网页中运行自己编写的JS脚本的两种方式

一、F12打开调试工具&#xff0c;利用控制台运行JS脚本 输入javascript:加上JS代码回车执行脚本 二、通过浏览器收藏夹运行JS脚本 以谷歌浏览器为例&#xff0c;新建收藏夹&#xff0c;网址处填写JS代码&#xff0c;添加收藏以后&#xff0c;点击图标即可执行

超强脚本网站-让你的浏览器拥有灵魂

点击此处直达&#xff1a; Greasy Fork - 安全、实用的用户脚本大全https://greasyfork.org/zh-CN