這幾個(gè)知識(shí)點(diǎn),你真的都吃透了嗎末荐?
# 先說(shuō) DOM:
DOM 全稱是 Document Object Model侧纯,也就是文檔對(duì)象模型
DOM 就是針對(duì) HTML 和 XML 提供的一個(gè)API,就是為了開(kāi)發(fā)人員能操作 HTML 內(nèi)容(比如添加節(jié)點(diǎn)甲脏、修改節(jié)點(diǎn)眶熬、刪除節(jié)點(diǎn)等)妹笆,瀏覽器下載到一個(gè)網(wǎng)頁(yè)時(shí),會(huì)將html解析成如下結(jié)構(gòu)的DOM樹(shù)娜氏,DOM樹(shù)中的所有內(nèi)容拳缠,都是一個(gè)個(gè)節(jié)點(diǎn)。
這個(gè) API 使得在網(wǎng)頁(yè)被下載到瀏覽器之后改變網(wǎng)頁(yè)的內(nèi)容成為可能
來(lái)玩點(diǎn)好玩的:
打開(kāi) 百度一下贸弥,打開(kāi)控制臺(tái)窟坐,輸入
document.head
,可以看到輸出了頁(yè)面的head
部分內(nèi)容此時(shí)茂腥,百度的標(biāo)簽是:
再進(jìn)入控制臺(tái)狸涌,輸入: document.title = "度娘"
,看到變化
同樣最岗,如果我們需要修改字體大小時(shí)帕胆,如下操作:
如果我們要修改頁(yè)面根元素的字體大小時(shí)(rem布局相關(guān)),使用 document.documentElement.style.fontSize = "24px"
?
# DOCUMENT
? 當(dāng)瀏覽器下載到一個(gè)網(wǎng)頁(yè)時(shí)般渡,通常是HTML懒豹,這個(gè) HTML 就叫 docuemnt,觀察 DOM樹(shù) 不難發(fā)現(xiàn)它也是一個(gè)節(jié)點(diǎn)驯用,它是整棵DOM樹(shù)的根節(jié)點(diǎn)脸秽,這個(gè)節(jié)點(diǎn)包含了標(biāo)題 document.title
,Url docuemnt.URL
等屬性蝴乔,可以直接在 JS 中訪問(wèn)到记餐。
在一個(gè)瀏覽器頁(yè)面中,可能有多個(gè)document薇正,例如帶有 iframe 的頁(yè)面即是如此片酝,在document中,我們還可以通過(guò)ID來(lái)訪問(wèn)元素挖腰,如:
document.getElementById("nodeId")
?
# BOM
BOM 是 Browser Object Model雕沿,瀏覽器對(duì)象模型。
? BOM 是 為了控制瀏覽器行為而提供的接口猴仑∩舐郑可能出現(xiàn)前進(jìn)一頁(yè),后退一頁(yè)辽俗,跳轉(zhuǎn)至某個(gè)頁(yè)面疾渣,手機(jī)橫豎屏切換,程序還可能需要獲取屏幕的大小參數(shù)等崖飘,例如榴捡,頁(yè)面跳轉(zhuǎn)(向程序外跳轉(zhuǎn)):
location.
這個(gè)location
就是BOM 里的一個(gè)對(duì)象
打開(kāi)控制臺(tái),我們可以看到除了href之外坐漏,location
還有以下屬性:
可以看到我們熟悉的重新加載 reload
和 replace
薄疚。
?
# WINDOW
? 和 location
類似碧信,window
也是 BOM 的一個(gè)對(duì)象,他是我們所謂的根對(duì)象街夭,意義同 DOM 中的document
一致砰碴,我們可以通過(guò)該對(duì)象獲取窗口位置,確定窗口大小板丽,彈出對(duì)話框等等呈枉。
例如我想關(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 是其的一個(gè)對(duì)象猖辫;
? BOM 是為了操作瀏覽器出現(xiàn)的 API,window 是其的一個(gè)對(duì)象砚殿;
上圖中啃憎,紅框部分即ABCD都屬于 BOM 內(nèi)容,綠框部分E屬于 DOM 內(nèi)容