DOM對(duì)象模型四大基本接口
在DOM對(duì)象模型接口規(guī)范中,有四個(gè)基本的接口,在這四個(gè)基本接口中,Document接口是對(duì)文檔進(jìn)行操作的入口,它是從Node接口繼承過(guò)來(lái)的。Node接口是其他大多數(shù)接口的父類(lèi),而NodeList接口是一個(gè)節(jié)點(diǎn)的集合,它包含了某個(gè)節(jié)點(diǎn)中的所有子節(jié)點(diǎn)。NamedNodeMap接口也是一個(gè)節(jié)點(diǎn)的集合。
DOM對(duì)象模型的四個(gè)基本接口
在DOM對(duì)象模型接口規(guī)范中,有四個(gè)基本的接口:Document,Node,NodeList以及NamedNodeMap。在這四個(gè)基本接口中,Document接口是對(duì)文檔進(jìn)行操作的入口,它是從Node接口繼承過(guò)來(lái)的。Node接口是其他大多數(shù)接口的父類(lèi),象Documet,Element,Attribute,Text,Comment等接口都是從Node接口繼承過(guò)來(lái)的。NodeList接口是一個(gè)節(jié)點(diǎn)的集合,它包含了某個(gè)節(jié)點(diǎn)中的所有子節(jié)點(diǎn)。NamedNodeMap接口也是一個(gè)節(jié)點(diǎn)的集合,通過(guò)該接口,可以建立節(jié)點(diǎn)名和節(jié)點(diǎn)之間的一一映射關(guān)系,從而利用節(jié)點(diǎn)名可以直接訪(fǎng)問(wèn)特定的節(jié)點(diǎn)。下面將對(duì)這四個(gè)接口分別做一些簡(jiǎn)單的介紹。
1.Document接口
Document接口代表了整個(gè)XML/HTML文檔,因此,它是整棵文檔樹(shù)的根,提供了對(duì)文檔中的數(shù)據(jù)進(jìn)行訪(fǎng)問(wèn)和操作的入口。
由于元素、文本節(jié)點(diǎn)、注釋、處理指令等都不能脫離文檔的上下文關(guān)系而獨(dú)立存在,所以在Document接口提供了創(chuàng)建其他節(jié)點(diǎn)對(duì)象的方法,通過(guò)該方法創(chuàng)建的節(jié)點(diǎn)對(duì)象都有一個(gè)ownerDocument屬性,用來(lái)表明當(dāng)前節(jié)點(diǎn)是由誰(shuí)所創(chuàng)建的以及節(jié)點(diǎn)同Document之間的聯(lián)系。
在DOM樹(shù)中,Document接口同其他接口之間的關(guān)系如下圖所示:
由圖可以看出,Document節(jié)點(diǎn)是DOM樹(shù)中的根節(jié)點(diǎn),也即對(duì)XML文檔進(jìn)行操作的入口節(jié)點(diǎn)。通過(guò)Docuemt節(jié)點(diǎn),可以訪(fǎng)問(wèn)到文檔中的其他節(jié)點(diǎn),如處理指令、注釋、文檔類(lèi)型以及XML文檔的根元素節(jié)點(diǎn)等等。另外,從上圖我們還可以看出,在一棵DOM樹(shù)中,Document節(jié)點(diǎn)可以包含多個(gè)處理指令、多個(gè)注釋作為其子節(jié)點(diǎn),而文檔類(lèi)型節(jié)點(diǎn)和XML文檔根元素節(jié)點(diǎn)都是***的。
關(guān)于Document接口的IDL(InterfaceDefinitionLanguage接口定義語(yǔ)言)定義和其中一些比較常用的屬性和方法的詳細(xì)介紹在許多參考書(shū)都可以找到。#p#
2.Node接口
Node接口在整個(gè)DOM樹(shù)中具有舉足輕重的地位,DOM對(duì)象模型接口中有很大一部分接口是從Node接口繼承過(guò)來(lái)的,例如,Element、Attr、CDATASection等接口,都是從Node繼承過(guò)來(lái)的。在DOM樹(shù)中,Node接口代表了樹(shù)中的一個(gè)節(jié)點(diǎn)。一個(gè)典型的Node接口如下圖所示:
如圖所示,Node接口提供了訪(fǎng)問(wèn)DOM樹(shù)中元素內(nèi)容與信息的途徑,并給出了對(duì)DOM樹(shù)中的元素進(jìn)行遍歷的支持。
3.NodeList接口
NodeList接口提供了對(duì)節(jié)點(diǎn)集合的抽象定義,它并不包含如何實(shí)現(xiàn)這個(gè)節(jié)點(diǎn)集的定義。NodeList用于表示有順序關(guān)系的一組節(jié)點(diǎn),比如某個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)序列。另外,它還出現(xiàn)在一些方法的返回值中,例如GetNodeByName。
在DOM對(duì)象模型中,NodeList的對(duì)象是"live"的,換句話(huà)說(shuō),對(duì)文檔的改變,會(huì)直接反映到相關(guān)的NodeList對(duì)象中。例如,如果通過(guò)DOM獲得一個(gè)NodeList對(duì)象,該對(duì)象中包含了某個(gè)Element節(jié)點(diǎn)的所有子節(jié)點(diǎn)的集合,那么,當(dāng)再通過(guò)DOM對(duì)Element節(jié)點(diǎn)進(jìn)行操作(添加、刪除、改動(dòng)節(jié)點(diǎn)中的子節(jié)點(diǎn))時(shí),這些改變將會(huì)自動(dòng)地反映到NodeList對(duì)象中,而不需DOM對(duì)象模型應(yīng)用程序再做其他額外的操作。
NodeList中的每個(gè)item都可以通過(guò)一個(gè)索引來(lái)訪(fǎng)問(wèn),該索引值從0開(kāi)始。
4.NamedNodeMap接口
實(shí)現(xiàn)了NamedNodeMap接口的對(duì)象中包含了可以通過(guò)名字來(lái)訪(fǎng)問(wèn)的一組節(jié)點(diǎn)的集合。不過(guò)注意,NamedNodeMap并不是從NodeList繼承過(guò)來(lái)的,它所包含的節(jié)點(diǎn)集中的節(jié)點(diǎn)是無(wú)序的。盡管這些節(jié)點(diǎn)也可以通過(guò)索引來(lái)進(jìn)行訪(fǎng)問(wèn),但這只是提供了枚舉NamedNodeMap中所包含節(jié)點(diǎn)的一種簡(jiǎn)單方法,并不表明在DOM對(duì)象模型規(guī)范中為NamedNodeMap中的節(jié)點(diǎn)規(guī)定了一種排列順序。
NamedNodeMap表示的是一組節(jié)點(diǎn)和其***名字的一一對(duì)應(yīng)關(guān)系,這個(gè)接口主要用在屬性節(jié)點(diǎn)的表示上。
與NodeList相同,在DOM中,NamedNodeMap對(duì)象也是"live"的。
【編輯推薦】