DOM 和 JavaScript 的關(guān)系
DOM 與 JavaScript 是分離的。
DOM 有自己的一套標(biāo)準(zhǔn),JavaScript 也有自己的一套標(biāo)準(zhǔn)。
JavaScript 是對(duì)標(biāo)準(zhǔn)的實(shí)現(xiàn),為一種語言,而 DOM 標(biāo)準(zhǔn)定義了一系列的接口,由此可以看出,他們兩者是可以毫不相干的。
但是在 Web 開發(fā)中,頁面內(nèi)容的展示全部通過瀏覽器解析展現(xiàn),JavaScript 想動(dòng)態(tài)的修改頁面,就必須由瀏覽器提供一些方法,交給開發(fā)者來操作頁面上的元素,因?yàn)?JavaScript 本身是沒有操作這些元素的能力的。
瀏覽器承擔(dān)了實(shí)現(xiàn)與暴露 DOM 接口的工作,根據(jù)標(biāo)準(zhǔn)實(shí)現(xiàn)一系列方法,隨后暴露給開發(fā)者使用。
如 document
對(duì)象,表示當(dāng)前的頁面,也可以理解成根節(jié)點(diǎn),JavaScript本身是沒有這個(gè)全局對(duì)象的。
可以通過遍歷 document 對(duì)象的屬性,來觀察一個(gè) DOM 節(jié)點(diǎn)都有些什么屬性和方法。
for (var i in document) {
console.log(i, document[i])
}
一個(gè)節(jié)點(diǎn)的屬性非常多,包括許多事件、子節(jié)點(diǎn)、操作節(jié)點(diǎn)的方法等。
瀏覽器通過暴露這些 DOM 相關(guān)的內(nèi)容給開發(fā)者,開發(fā)者通過 JavaScript 進(jìn)行操作。
對(duì)瀏覽器而言,document 實(shí)際上不是最頂層的節(jié)點(diǎn),再向上還有 window ,這一點(diǎn)可以在事件相關(guān)的章節(jié)體現(xiàn)。
小結(jié)
JavaScript 和 DOM 本身是可以沒有關(guān)系的,但是開發(fā)者需要操作 DOM ,瀏覽器實(shí)現(xiàn)了對(duì)應(yīng)的方法,暴露給開發(fā)者,開發(fā)者使用 JavaScript 來調(diào)用以達(dá)到操作 DOM 的目的。