首先DOM全稱爲(document Object Model),是針對HTML和XML的API。 能夠理解爲DOM就是一系列功能集合。從一下幾個方面理解
1、網頁如何構建
瀏覽器如何從源HTML文檔轉到在視口中顯示樣式化和交互式頁面稱爲「關鍵渲染路徑」。 這些步驟大體可分爲兩個階段。第一階段涉及瀏覽器解析文檔以肯定最終將在頁面上渲染的內容,第二階段涉及瀏覽器執行渲染。html
第一階段的結果是所謂的「渲染樹」。 渲染樹是將在頁面上呈現的HTML元素及其相關樣式的表示。 爲了構建這個樹,瀏覽器須要兩件事:web
CSSOM,元素相關樣式的結構;
DOM,元素結構瀏覽器
二 、DOM如何建立(長啥樣)
DOM是HTML源文檔的基於對象的表示。它有一些差別,咱們將在下面看到,但它本質上是一種嘗試將HTML文檔的結構和內容轉換爲可供各類程序使用的對象模型。
DOM的對象結構由所謂的「節點樹」表示。 它之因此被稱爲樹是由於它能夠被認爲是具備單個父莖的樹,其分枝成幾個子枝,每一個子枝能夠具備葉子。 在這種狀況下,父「stem」是根元素,子「branches」是嵌套元素,「leaves」是元素中的內容。
咱們以此HTML文檔爲例:
<!doctype html>
<html lang="en">
<head>
<title>My first web page</title>
</head>
<body>
<h1>Hello, world!</h1>
<p>How are you?</p>
</body>
</html>
此文檔能夠表示爲如下節點樹:
html
head
title
My first web page
body
h1
Hello, world!
p
How are you?
DOM不是什麼
在上面給出的示例中,看起來DOM是源HTML文檔的一對一映射或者你看到的DevTools的映射。 可是,正如我所提到的,存在差別。爲了徹底理解DOM是什麼,咱們須要看看它不是什麼。
DOM不是你的html源文檔
儘管DOM是從源HTML文檔建立的,但它並不老是徹底相同。 有兩個實例,DOM能夠與源HTML不一樣。app
這就是爲何僞元素不能被Javascript直接獲取到的緣由,由於僞元素不是DOM的一部分。
總結
DOM是HTML文檔的接口。 它被瀏覽器用做肯定在視口中呈現內容的第一步,並經過Javascript程序來修改頁面的內容,結構或樣式。
雖然與其餘形式的源HTML文檔相似,但DOM在許多方面有所不一樣:ide
有效的HTML,一個能夠經過Javascript修改的結構,DOM不包含僞元素(例如:: after) 它確實包含隱藏元素(例如display:none)code