DOM 是用來訪問或操作HTML文檔、XHTML文檔、XML文檔中的節(jié)點元素。
現(xiàn)在基本上所有的瀏覽器都都執(zhí)行了W3C發(fā)布的DOM規(guī)范,所以在瀏覽器上就可以用DOM的這些API。
DOM的級別Level
DOM0:不是W3C規(guī)范。
DOM1:開始是W3C規(guī)范。專注于HTML文檔和XML文檔。
DOM2:對DOM1增加了樣式表對象模型
DOM3:對DOM2增加了內(nèi)容模型 (DTD 、Schemas) 和文檔驗證。
牢記:站高一個維度去理解問題 !
為了理解DOM,我們至少需要站在瀏覽器的角度來思考。
DOM概念本身很簡單,請先完全跟著我的思路來:
抽象一下:
再抽象一下:
最后:
再回顧下整個過程,每個步驟都可以問自己幾個問題,比如:DOM到底是建模過程,還是最后建的那個模型,還是指操作節(jié)點的API接口呢,還是...?
以上是站在瀏覽器的角度思考DOM,你還可以站在瀏覽器設(shè)計人員、網(wǎng)頁編碼人員等角度考慮:
至此,你應該明白了什么是DOM,甚至明白了為什么一開始不明白以后如何做,如何舉一反三,甚至還能看出一點如何建立體系化認知的影子。笑
牢記:站高一個維度去理解問題 !
文檔對象模型( DOM, Document Object Model )主要用于對HTML和XML文檔的內(nèi)容進行操作。DOM描繪了一個層次化的節(jié)點樹,通過對節(jié)點進行操作,實現(xiàn)對文檔內(nèi)容的添加、刪除、修改、查找等功能。
一、DOM樹
DOM樹有兩種,分別為節(jié)點樹和元素樹。
節(jié)點樹:把文檔中所有的內(nèi)容都看成樹上的節(jié)點;
元素樹:僅把文檔中的所有標簽看成樹上的節(jié)點。
二、DOM常用操作
2.1 查找節(jié)點
document.getElementById('id屬性值');
返回擁有指定id的第一個對象的引用
document/element.getElementsByClassName('class屬性值');
返回擁有指定class的對象集合
document/element.getElementsByTagName('標簽名');
返回擁有指定標簽名的對象集合
document.getElementsByName('name屬性值');
返回擁有指定名稱的對象結(jié)合
document/element.querySelector('CSS選擇器');
僅返回第一個匹配的元素
document/element.querySelectorAll('CSS選擇器');
返回所有匹配的元素
document.documentElement
獲取頁面中的HTML標簽
document.body
獲取頁面中的BODY標簽
document.all['']
獲取頁面中的所有元素節(jié)點的對象集合型
2.2 新建節(jié)點
document.createElement('元素名');
創(chuàng)建新的元素節(jié)點
document.createAttribute('屬性名');
創(chuàng)建新的屬性節(jié)點
document.createTextNode('文本內(nèi)容');
創(chuàng)建新的文本節(jié)點
document.createComment('注釋節(jié)點');
創(chuàng)建新的注釋節(jié)點
document.createDocumentFragment( );
創(chuàng)建文檔片段節(jié)點
2.3 添加新節(jié)點
parent.appendChild( element/txt/comment/fragment );
向父節(jié)點的最后一個子節(jié)點后追加新節(jié)點
parent.insertBefore( newChild, existingChild );
向父節(jié)點的某個特定子節(jié)點之前插入新節(jié)點
element.setAttributeNode( attributeName );
給元素增加屬性節(jié)點
element.setAttribute( attributeName, attributeValue );
給元素增加指定屬性,并設(shè)定屬性值
dom是app文檔格式。
DOM一般指文檔對象模型。文檔對象模型(Document Object Model,簡稱DOM),是W3C組織推薦的處理可擴展置標語言的標準編程接口。它是一種與平臺和語言無關(guān)的應用程序接口(API),它可以動態(tài)地訪問程序和腳本,更新其內(nèi)容、結(jié)構(gòu)和www文檔的風格。
DOM是一種基于樹的API文檔,它要求在處理過程中整個文檔都表示在存儲器中。
DOM: 要求解析器將整個XML 文檔裝在到內(nèi)存, 并解析成一個 Document 對象.
a) . 優(yōu)點: 元素與元素之間保留結(jié)構(gòu)關(guān)系, 故可以進行增刪改查操作.
b) . 缺點: XML 文檔過大, 可能出現(xiàn)內(nèi)存溢出現(xiàn)象
解析器: 就是根據(jù)不同的解析方式提供的具體實現(xiàn), 有的解析器操作過于繁瑣, 為開發(fā)方便, 提供了易于操作的解析開發(fā)包。
dom是Document Object Model縮寫,翻譯過來就是文檔對象模型
文檔對象模型(Document Object Model,簡稱DOM),是W3C組織推薦的處理可擴展置標語言的標準編程接口。它是一種與平臺和語言無關(guān)的應用程序接口(API),它可以動態(tài)地訪問程序和腳本,更新其內(nèi)容、結(jié)構(gòu)和www文檔的風格(HTML和XML文檔是通過說明部分定義的)。文檔可以進一步被處理,處理的結(jié)果可以加入到當前的頁面。
文檔對象模型(Document Object Model,簡稱DOM),是W3C組織推薦的處理可擴展置標語言的標準編程接口。它是一種與平臺和語言無關(guān)的應用程序接口(API),它可以動態(tài)地訪問程序和腳本,更新其內(nèi)容、結(jié)構(gòu)和www文檔的風格(HTML和XML文檔是通過說明部分定義的)。文檔可以進一步被處理,處理的結(jié)果可以加入到當前的頁面。
1 虛擬dom是在操作真實dom的基礎(chǔ)上進行操作和渲染的,相較于真實dom來說更加輕量級、高效且易于維護。2 虛擬dom不需要直接操作真實dom,而是通過diff算法和批量操作等方式,將修改后的虛擬dom與之前的虛擬dom進行比對,最終僅對需要進行更新的真實dom節(jié)點進行操作,從而降低了dom操作的成本和頻率。3 使用虛擬dom可以提供更加流暢的用戶體驗,同時也能夠減輕大型web應用程序的服務(wù)器壓力。4 真實dom的操作屬于瀏覽器的原生操作,因此在某些場景下可能比虛擬dom更加高效,例如單頁面應用程序中復雜交互和低延遲等操作,但同時也會帶來更多的維護和優(yōu)化難度。
你是在什么場景下遇到這個問題的?login.dom我能聯(lián)想到的可能只有dom是某個叫l(wèi)ogin的對象的屬性
1 虛擬DOM和真實DOM的最大區(qū)別在于刷新頁面方式的不同。
真實DOM需要重新渲染整個頁面,而虛擬DOM只更新需要更新的部分,減少了頁面重繪的操作,從而提高了頁面的渲染效率。
2 虛擬DOM是在內(nèi)存中維護的一份虛擬的DOM樹,通過比對虛擬DOM和真實DOM的差異來進行有針對性地更新操作,實現(xiàn)最小化渲染,提高效率。
3 虛擬DOM還能夠保證頁面渲染的一致性,不受操作系統(tǒng)和瀏覽器的影響,并且方便進行跨平臺和跨框架開發(fā)。
因此,虛擬DOM成為了眾多前端框架和庫的共同選擇,如React、Vue等等。