[Pre-Class] DOM

"

DOM

什麼是 DOM? (請不要看成DOOM啊)

全名為 Document Object Model.
簡單說就是對一個文件裡的內容產生一種物件概念.
只要是屬於文件內的物件, 你都有方法把他抓出來, 並可加以處理.
而 DOM 正是我們與物件之間的橋樑.
這樣的橋樑用專業術語來說就是 API. (Application Programming Interface)

DOM 正式發表是從1998年由 W3C 組織所提出. (DOM 1)
其出發點是為了讓一些 JavaScript 腳本 及 Java 程式能夠在不同的瀏覽器之間使用.

而 DOM 的前身 可以說是來自 Dynamic HTML - HTML,CSS,Javascript 所併合出來的東西.
當其時正是瀏覽器大戰 - Netscape V.S. Internet Explorer 的時期,
DHTML 這種東西沒有很好的一種規範, 不同瀏覽器之間所使用的 Javascript 不完全一樣,
做成網頁設計者在瀏覽器兼容上很大的麻煩, 也加速了 DOM 的發展.

DOM 的出現對 DHTML 的發展產生很大的幫助, 使得設計者可以在不同的瀏覽器上使用統一的介面呼叫物件.
因此現在談及 DHTML 的話, 也會把 DOM 一起併合進來.

常見的應用是在 HTML 及 XML 中, 不過其實只要是合乎這種結構的東西理論上都可以用 DOM 來表達.

按照 W3C 所說, DOM 的特徵是:
the interfaces and objects used to represent and manipulate a document
用來表示處理文件的介面及物件

the semantics of these interfaces and objects - including both behavior and attributes
這些介面及物件的語義 (包括 表現和屬性)

the relationships and collaborations among these interfaces and objects
這些介面及物件間的關係和合作

對於W3C還沒正式發表DOM之前, IE 與 Netscape 之間呼叫物件的差異可參考:
把應用程序從 Internet Explorer 遷移到 Mozilla - DOM 差異
http://www.ibm.com/developerworks/cn/web/wa-ie2mozgd/?ca=wa-t10#dom_differences

現在 DOM Level 3(最新版) 的藍圖:
http://www.w3.org/TR/DOM-Level-3-Core/introduction.html

延伸:
DOM 為網頁設計者解決不少問題, 但實際使用上還是有點麻煩.
在 Web 2.0 的時代, Javascript Prototype Object 的潛在能力被廣泛"激發"出來(帶頭者不明),
眾多由 Prototype Object 衍生出來的 Javascript Framework 發佈,
又再一次為網頁設計者帶來新一股衝擊, 使得 Javascript 及 DOM 在使用上更加方便.
其中比較熱門的 Framework 有:

Prototype
http://www.prototypejs.org/

jQuery
http://jquery.com/

moo.fx
http://moofx.mad4milk.net/

script.aculo.us
http://script.aculo.us/

Dojo
http://dojotoolkit.org/

參考連結:
Document Object Model (DOM)
http://www.w3.org/DOM/

About the W3C Document Object Model
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dom/domoverview.asp

MSXML DOM Reference
http://msdn2.microsoft.com/en-us/library/ms764730.aspx

Gecko DOM Reference
http://developer.mozilla.org/en/docs/Gecko_DOM_Reference

HTML DOM Tutorial
http://www.w3schools.com/htmldom/default.asp

XML DOM Tutorial
http://www.w3schools.com/dom/default.asp

"