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