felix-cao / Blog

A little progress a day makes you a big success!
31 stars 4 forks source link

DOM 是 javaScript 与 HTML 页面进行对话的接口 #125

Open felix-cao opened 5 years ago

felix-cao commented 5 years ago

一、概述

文档对象模型, 我有个有趣的记忆:文档即 HTML 文档, 对象提供了属性和方法,模型即使用属性和方法去操作 HTML 文档,操作是指 增删改查 DOM 节点。

DOMjavaScriptHTML 页面进行对话的接口,JavaScript 可以通过 DOM 接口对 HTML 页面中的各个元素进行操作。

《BOM 对象和 DOM 对象》一文中我们提到了BOM,那么 BOM 就是 JavaScript 和浏览器对象进行对话的接口,我们真正在使用的时候浏览器是五花八门的,那如果想要使你的 JavaScript 代码可以在不同的浏览器上显示相同的行为,那就必须定义一个JavaScript和浏览器对象对话的接口,这个接口就是BOM, 而BOM中定义的对象就是Window,所有浏览器都支持 window 对象。它表示浏览器窗口。也就是说你在JavaScript中对window对象的操作,不管你在任何浏览器中都会执行相同的操作(因为所有的浏览器都支持window对象的相同的方法和属性)

不过,本文主要讲解 DOM

二、文档对象模型概念

文档对象模型 ,英文 Document Object Model, 简称 DOM, 是HTMLXML文档的编程接口。它是一种跨平台的、独立于编程语言的API,它把HTMLXHTMLXML文档当作一个树结构,而每个节点视为一个对象,这些对象可以被编程语言操作,进而改变文档的结构,映射到文档的显示。

这段话来自 mozilla web docs 中的 DOM 概述, 听起来还是有点蒙。我来提炼一下:

为了理解 文档对象模型, 我们先来缕缕上文提到的 HTMLXML, 这两种标记语言(Markup Language

三、HTML 与 XML 两种标记语言

HTML 被设计用来显示数据,XML 被设计用来传输和存储数据。

事实上,XML 的数据格式已经被 JSON 的数据格式所取代,尤其是 WEB 系统,已经很少看见后端给前端传递的数据是 XML 格式的了。

3.1、HTML

2.1.1、什么是 HTML

HTMLHyperText Markup Language 的英文简称,翻译过来就是 超文本标记语言, 维基百科里有它的概念描述,从中我们了解到:

值得一提的是, 2014年10月28日,HTML5作为稳定W3C推荐标准发布,这意味着HTML5的标准化已经完成。

3.1.2、HTML 标签

HTML 标记标签通常被称为 HTML 标签 (HTML tag)。

3.1.3、HTML 文档 = 网页

3.1.4、HTML中的节点

3.2.1、HTML 与 XML 比较

四、HTML 与 DOM树

浏览器解析HTML文档中的 HTML 标签生成 DOM 树,此后 HTML中的每个标签元素、属性、样式、文本都能看做是DOM树中的一个节点,JavaScript 都能通过 DOM 提供的编程接口操作到每个节点.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>dom</title>
</head>
<body>
    <div>
        <a href="www.baidu.com">百度</a>
    </div>
</body>
</html>

对应的DOM树结构图:

五、JavaScript 操作 DOM

上一部分我们了解到 JavaScript 可以通过 DOM 提供的编程接口操作到每个DOM节点,而JavaScript 操作 DOM 主要是 增删改查 DOM 节点

5.1、增

5.1.1、创建新节点

六、浏览器干了啥

JavaScriptDOM 的增删改操作后,会引起浏览器的 reflow(回流)repaint(重绘) 操作,而 reflowrepaint 会引发浏览器性能问题,其中 reflow 的成本比 repaint 的成本高得多的多。因此:

图为 Mozilla 的 Gecko 渲染引擎主流程

想了解更多 reflowrepaint 可以移步 《浏览器的 reflow 和 repaint》

Reference