DOM,DOCUMENT; BOM,WINDOW

這幾個知識點,你真的都吃透了嗎?

# 先說 DOM

DOM 全稱是 Document Object Model,也就是文檔對象模型

DOM 就是針對 HTML 和 XML 提供的一個API,就是為了開發(fā)人員能操作 HTML 內(nèi)容(比如添加節(jié)點、修改節(jié)點、刪除節(jié)點等),瀏覽器下載到一個網(wǎng)頁時,會將html解析成如下結(jié)構(gòu)的DOM樹,DOM樹中的所有內(nèi)容,都是一個個節(jié)點。

DOM 樹

這個 API 使得在網(wǎng)頁被下載到瀏覽器之后改變網(wǎng)頁的內(nèi)容成為可能
來玩點好玩的:
打開 百度一下,打開控制臺,輸入document.head,可以看到輸出了頁面的head部分內(nèi)容
百度廣告真套路

此時,百度的標(biāo)簽是:


百度一下標(biāo)簽名

再進入控制臺,輸入: document.title = "度娘",看到變化

修改后的標(biāo)簽名

同樣,如果我們需要修改字體大小時,如下操作:
如果我們要修改頁面根元素的字體大小時(rem布局相關(guān)),使用 document.documentElement.style.fontSize = "24px"
?

# DOCUMENT

? 當(dāng)瀏覽器下載到一個網(wǎng)頁時,通常是HTML,這個 HTML 就叫 docuemnt,觀察 DOM樹 不難發(fā)現(xiàn)它也是一個節(jié)點,它是整棵DOM樹的根節(jié)點,這個節(jié)點包含了標(biāo)題 document.title,Url docuemnt.URL等屬性,可以直接在 JS 中訪問到。

在一個瀏覽器頁面中,可能有多個document,例如帶有 iframe 的頁面即是如此,在document中,我們還可以通過ID來訪問元素,如:
document.getElementById("nodeId")
?

# BOM

BOM 是 Browser Object Model,瀏覽器對象模型。

? BOM 是 為了控制瀏覽器行為而提供的接口??赡艹霈F(xiàn)前進一頁,后退一頁,跳轉(zhuǎn)至某個頁面,手機橫豎屏切換,程序還可能需要獲取屏幕的大小參數(shù)等,例如,頁面跳轉(zhuǎn)(向程序外跳轉(zhuǎn)):

location.

這個location就是BOM 里的一個對象
打開控制臺,我們可以看到除了href之外,location還有以下屬性:

location對象

可以看到我們熟悉的重新加載 reloadreplace
?

# WINDOW

? 和 location 類似,window也是 BOM 的一個對象,他是我們所謂的根對象,意義同 DOM 中的document一致,我們可以通過該對象獲取窗口位置,確定窗口大小,彈出對話框等等。

例如我想關(guān)閉當(dāng)前窗口: window.close()
例如我想緩存信息到本地: window.sessionStorage.setItem('key', 'value');
例如我想后退一步: window.history.go(-1)
甚至,我想看一下我現(xiàn)在在使用什么瀏覽器(如查看andriod內(nèi)置webview): window.parent.browser等等
?

# 總結(jié)一下:

? DOM 是為了操作文檔出現(xiàn)的 API,document 是其的一個對象;
? BOM 是為了操作瀏覽器出現(xiàn)的 API,window 是其的一個對象;

DOM和BOM管轄范圍

上圖中,紅框部分即ABCD都屬于 BOM 內(nèi)容,綠框部分E屬于 DOM 內(nèi)容

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容