DOM

DOM

文檔對象模型
文檔對象模型(Document Object Model,簡稱DOM),是W3C組織推薦的處理可擴展标志語言的标準編程接口。根據W3C DOM規範,DOM是一種與浏覽器,平台,語言的接口,使得你可以訪問頁面其他的标準組件。Document Object Model的曆史可以追溯至1990年代後期微軟與Netscape的“浏覽器大戰”,雙方為在JavaScript與JScript一決生死,于是大規模的賦予浏覽器強大的功能。微軟在網頁技術上加入了不少專屬事物,計有VBScript、ActiveX、以及微軟自家的DHTML格式等,使不少網頁使用非微軟平台及浏覽器無法正常顯示。DOM即是當時蘊釀出來的傑作。
  • 中文名:文檔對象模型
  • 外文名:
  • 别名:
  • 英文名:Document Object Model
  • 簡稱:DOM
  • 應用:處理可擴展标志語言
  • 平台:Windows

背景介紹

DOM(Document Object Model),文檔對象模型,DOM可以以一種獨立于平台和語言的方式訪問和修改一個文檔的内容和結構。換句話說,這是表示和處理一個HTML或XML文檔的常用方法。有一點很重要,DOM的設計是以對象管理組織(OMG)的規約為基礎的,因此可以用于任何編程語言。最初人們把它認為是一種讓JavaScript在浏覽器間可移植的方法,不過DOM的應用已經遠遠超出這個範圍。Dom技術使得用戶頁面可以動态地變化,如可以動态地顯示或隐藏一個元素,改變它們的屬性,增加一個元素等,Dom技術使得頁面的交互性大大地增強。

DOM實際上是以面向對象方式描述的文檔模型。DOM定義了表示和修改文檔所需的對象、這些對象的行為和屬性以及這些對象之間的關系。可以把DOM認為是頁面上數據和結構的一個樹形表示,不過頁面當然可能并不是以這種樹的方式具體實現。

通過JavaScript,您可以重構整個HTML文檔。您可以添加、移除、改變或重排頁面上的項目

要改變頁面的某個東西,JavaScript就需要獲得對HTML文檔中所有元素進行訪問的入口。這個入口,連同對HTML元素進行添加、移動、改變或移除的方法和屬性,都是通過文檔對象模型來獲得的(DOM)。

在1998年,W3C發布了第一級的DOM規範。這個規範允許訪問和操作HTML頁面中的每一個單獨的元素。

所有的浏覽器都執行了這個标準,因此,DOM的兼容性問題也幾乎難覓蹤影了。

DOM可被JavaScript用來讀取、改變HTML、XHTML以及XML文檔。

DOM被分為不同的部分(核心、XML及HTML)和級别(DOM Level1/2/3):

DOM

DOM是W3C(萬維網聯盟)的标準。

DOM定義了訪問HTML 和XML文檔的标準:

W3C文檔對象模型(DOM)是中立于平台和語言的接口,它允許程序和腳本動态地訪問和更新文檔的内容、結構和樣式。"

W3C DOM 标準被分為3個不同的部分:

核心DOM-針對任何結構化文檔的标準模型

XML DOM-針對XML文檔的标準模型

HTML DOM-針對HTML文檔的标準模型

XMLDOM

XML DOM是:

用于XML的标準對象模型

用于XML的标準編程接口

中立于平台和語言

W3C标準

XML DOM定義了所有XML元素的對象和屬性,以及訪問它們的方法(接口)。

換句話說:XML DOM是用于獲取、更改、添加或删除XML元素的标準。

HTMLDOM

HTML DOM是:

HTML的标準對象模型

HTML的标準編程接口

W3C标準

HTML DOM定義了所有HTML元素的對象和屬性,以及訪問它們的方法。

換言之,HTML DOM是關于如何獲取、修改、添加或删除HTML元素的标準。

發展過程

從DOM Level 1開始,DOM API 包含了一些接口,用于表示可從 XML 文檔中找到的所有不同類型的信息。它還包含使用這些對象所必需的方法和屬性。

Level 1包括對XML 1.0和HTML 的支持,每個 HTML 元素被表示為一個接口。它包括用于添加、編輯、移動和讀取節點中包含的信息的方法,等等。然而,它沒有包括對 XML 名稱空間(XML Namespace)的支持,XML 名稱空間提供分割文檔中的信息的能力。DOM Level 2添加了名稱空間支持。Level 2擴展了 Level 1,允許開發人員檢測和使用可能适用于某個節點的名稱空間信息。Level 2還增加了幾個新的模塊,以支持級聯樣式表、事件和增強的樹操作。當前正處于定稿階段的 DOM Level 3包括對創建 Document 對象(以前的版本将這個任務留給實現,使得創建通用應用程序很困難)的更好支持、增強的名稱空間支持,以及用來處理文檔加載和保存、驗證以及 XPath 的新模塊;XPath 是在XSL 轉換(XSL Transformation)以及其他 XML 技術中用來選擇節點的手段。DOM 的模塊化意味着作為開發人員,您必須知道自己希望使用的特性是否受正在使用的 DOM 實現所支持。

可用特性

DOM 推薦标準的模塊性質允許實現者挑選将要包括到産品中的部分,因而在使用某個特定的特性之前,首先确定該特性是否可用可能是必要的。使用 DOM Level 2 Core API,不過在着手您自己的項目時,了解如何能夠檢測特性是有所幫助的。

DOM 中定義的接口之一就是 DOMImplementation。通過使用 hasFeature() 方法,可以确定某個特定的特性是否受支持。DOM Level 2 中不存在創建DOMImplementation 的标準方法,不過下面的代碼将展示如何使用 hasFeature() 來确定 DOM Level 2 樣式表模塊在某個 Java 應用程序中是否受支持。

import javax.xml.parsers.DocumentBuilderFactory;

import javax.xml.parsers.DocumentBuilder;

import org.w3c.dom.DOMImplementation;

public class ShowDomImpl {

public static void main (String args[]) {

try {

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

DocumentBuilder docb = dbf.newDocumentBuilder();

DOMImplementation domImpl = docb.geTDOMImplementation();

if (domImpl.hasFeature("StyleSheets", "2.0")) {

System.out.println("Style Sheets are supported.");

} else {

System.out.println("Style Sheets are not supported.");

}

} catch (Exception e) {}

}

}

(DOM Level 3 将包括用于創建 DOMImplementation 的标準方法。)将使用單個文檔來展示 DOM Level 2 Core API 的對象和方法。

數字正射影像圖

數字正射影像圖(DOM,DigitalOrthophotoMap):是對航空(或航天)像片進行數字微分糾正和鑲嵌,按一定圖幅範圍裁剪生成的數字正射影像集。它是同時具有地圖幾何精度和影像特征的圖像。

DOM具有精度高、信息豐富、直觀逼真、獲取快捷等優點,可作為地圖分析背景控制信息,也可從中提取自然資源和社會經濟發展的曆史信息或最新信息,為防治災害和公共設施建設規劃等應用提供可靠依據;還可從中提取和派生新的信息,實現地圖的修測更新。評價其它數據的精度、現實性和完整性都很優良。合肥市數字正射影像圖DOM.jpg。

該圖的技術特征為:數字正射影像,地圖分幅、投影、精度、坐标系統、與同比例尺地形圖一緻,圖像分辨率為輸入大于400dpi;輸出大于250dpi。由于DOM是數字的,在計算機上可局部開發放大,具有良好的判讀性能與量測性能和管理性能等,如用農村土地發證,指認宗界地界比并數字化其點位坐标、土地利用調查等等。DOM可作為獨立的背景層與地名注名,圖廓線公裡格、公裡格網及其它要素層複合,制作各種專題圖。

生産技術

制作的主要技術方法:采用航空像片或高分辨率衛星遙感圖像數據等。利用:1)VintuoZo系統數字攝影測量工作站。VintuoZo系統可以利用對DEM的檢測及編輯,來提高DOM的精度。還可以通過像片間、圖幅間進行灰度接邊,以保證影像色調的一緻性。2)采用jx-4DPW系統。jx-4DPW是一套基于WINDOWSNT的數字攝影測量系統。因其對DEM的編輯采用的是單點編輯,而且該系統還具有對DOM的零立體檢查的功能,故其DOM的精度較高。基于DEM的單片數字微分糾正VintuoZo系統具有單片數字微分糾正的模塊。

數字正射影像圖的應用

洪水監測、河流變遷、旱情監測;

農業估産(精準農業);

土地覆蓋與土地利用土地資源的動态監測;

荒漠化監測與森林監測(成林害蟲);

海岸線保護;

生态變化監測。

DOM的優勢主要表現在:易用性強,使用DOM時,将把所有的XML文檔信息都存于内存中,并且遍曆簡單,支持XPath,增強了易用性。

DOM的缺點主要表現在:效率低,解析速度慢,内存占用量過高,對于大文件來說幾乎不可能使用。另外效率低還表現在大量的消耗時間,因為使用DOM進行解析時,将為文檔的每個element、attribute、processing-instrUCtion和comment都創建一個對象,這樣在DOM機制中所運用的大量對象的創建和銷毀無疑會影響其效率。

訪問節點

你可通過若幹種方法來查找您希望操作的元素:

通過使用getElementById()和getElementsByTagName()方法

通過使用一個元素節點的parentNode、firstChild以及lastChild 屬性

getElementById()和getElementsByTagName()這兩種方法,可查找整個HTML文檔中的任何HTML元素。

這兩種方法會忽略文檔的結構。假如您希望查找文檔中所有的

元素,getElementsByTagName()會把它們全部找到,不管

元素處于文檔中的哪個層次。同時,getElementById()方法也會返回正确的元素,不論它被隐藏在文檔結構中的什麼位置。

這兩種方法會向您提供任何你所需要的HTML元素,不論它們在文檔中所處的位置!

getElementById()可通過指定的ID來返回元素:

getElementById()語法

document.getElementById("ID");注釋:getElementById()無法工作在XML中。在XML文檔中,您必須通過擁有類型id的屬性來進行搜索,而此類型必須在XML DTD中進行聲明。

getElementsByTagName()方法會使用指定的标簽名返回所有的元素(作為一個節點列表),這些元素是您在使用此方法時所處的元素的後代。

getElementsByTagName()可被用于任何的 HTML 元素:

getElementsByTagName()語法

document.getElementsByTagName("标簽名稱");或者:

document.getElementById('ID').getElementsByTagName("标簽名稱");

實例1

下面這個例子會返回文檔中所有

元素的一個節點列表:

document.getElementsByTagName("p");

實例2

下面這個例子會返回所有

元素的一個節點列表,且這些

元素必須是id為"maindiv"的元素的後代:

document.getElementById('maindiv').getElementsByTagName("p");

節點列表

當我們使用節點列表時,通常要把此列表保存在一個變量中,就像這樣:

var x=document.getElementsByTagName("p");現在,變量x包含着頁面中所有

元素的一個列表,并且我們可以通過它們的索引号來訪問這些

元素。

注釋:索引号從0開始。

您可以通過使用length屬性來循環遍曆節點列表:

var x=document.getElementsByTagName("p");for(var i=0;i

要訪問第三個

元素,您可以這麼寫:

var y=x[2];

parentNode、firstChild以及lastChild

這三個屬性 parentNode、firstChild以及lastChild可遵循文檔的結構,在文檔中進行“短距離的旅行”。

請看下面這個HTML片段: 

JohnDoeAlaska

在上面的HTML代碼中,第一個是元素的首個子元素(firstChild),而最後一個是元素的最後一個子元素(lastChild)。

此外,是每個元素的父節點(parentNode)。

對 firstChild 最普遍的用法是訪問某個元素的文本:

var x=[a paragraph]; var text=x.firstChild.nodeValue;parentNode屬性常被用來改變文檔的結構。假設您希望從文檔中删除帶有id為"maindiv"的節點:

var x=document.getElementById("maindiv"); x.parentNode.removeChild(x);首先,您需要找到帶有指定id的節點,然後移至其父節點并執行removeChild()方法。

優點和缺點

DOM的優勢主要表現在:易用性強,使用DOM時,将把所有的XML文檔信息都存于内存中,并且遍曆簡單,支持XPath,增強了易用性。

DOM的缺點主要表現在:效率低,解析速度慢,内存占用量過高,對于大文件來說幾乎不可能使用。另外效率低還表現在大量的消耗時間,因為使用DOM進行解析時,将為文檔的每個element、attribute、processing-instrUCtion和comment都創建一個對象,這樣在DOM機制中所運用的大量對象的創建和銷毀無疑會影響其效率。

相關詞條

相關搜索

其它詞條