對於JavaScript DOM,首先需要理解的一點是,DOM是針對XML的基於樹的API,它的實現有很多各語言基本都有自己的實現),文章將討論的是JavaScript中或者說xhtml(html)對DOM的實現。
BKJIA推薦閱讀:JavaScript DOM的本質及操作方法
使用DOM
考慮一個html檔案:
- <html>
- <head><title>測試</title></head>
- <body>
- <p>測試</p>
- </body>
- </html>
1.訪問節點
◆訪問html元素:var oHtml=document.documentElement;
◆擷取head元素:var oHead=oHtml.firstChild;
◆擷取body元素:var oBody=oHtml.lastChild; 或者 var oBody=document.body;
也可以通過childNodes來做同樣的工作:
- var oHead=oHtml.childNodes[0] 或者 oHtml.childNodes.item(0);
- var oBody=oHtml.childNodes[1] 或者 oHtml.childNodes.item(1);
判斷節點間關係:
- alert(oHead.parentNode==oHtml);
- alert(oBody.previousSibling==oHead);
- alert(oHead.nextSibling==oBody);
- alert(oHead.ownerDocument==document);
2.檢測節點類型
通過節點的nodeType屬性來檢驗節點類型:
- alert(document.nodeType); //輸出9
需要注意的是,DOM相容的瀏覽器以FF2.0為例),擁有Node.DOCUMENT_NODE、Node.ELEMENT_NODE等常量。各常量名稱與數值對照表如下:
- ELEMENT_NODE 1
- ATTRIBUTE_NODE 2
- TEXT_NODE 3
- CDATA_SECTION_NODE 4
- ENTITY_REFERENCE_NODE 5
- ENTITY_NODE 6
- PROCESSING_INSTRCTION_NODE 7
- COMMENT_NODE 8
- DOCUMENT_NODE 9
- DOCUMENT_TYPE_NODE 10
- DOCUMENT_FRAGMENT_NODE 11
- NOTATION_NODE 12
-
IE6不支援,不過你可以自訂一個JavaScript對象Node。
3.處理特性
處理特性可以使用標準的NameNodeMap中的方法:
- getNamedItem(name) removeNamedItem(name) setNamedItem(node) item(pos)
比如:<p id="test">測試</p>,假設變數oP是上面的p節點的引用,我們要訪問oP的id屬性:
- var sId=oP.attributes.getNamedItem("id").nodeValue;
這些方法用起來很累贅,所以DOM又定義了三個方法來簡化:
- getAttribute(name) ——返回名稱為name的屬性的值
- setAttribute(name,value) ——顧名思義
- removeAttribute(name) ——顧名思義
上面的例子可以改寫為:
- var sId=oP.getAttribute("name");
4.訪問指定節點
熟知的getElementByTagName(name),getElementByName(name),getElementById(id)三個方法,不再展開。