新聞中心
對(duì)于JavaScript DOM,首先需要理解的一點(diǎn)是,DOM是針對(duì)XML的基于樹的API,它的實(shí)現(xiàn)有很多(各語言基本都有自己的實(shí)現(xiàn)),文章將討論的是JavaScript中或者說xhtml(html)對(duì)DOM的實(shí)現(xiàn)。

成都創(chuàng)新互聯(lián),專注為中小企業(yè)提供官網(wǎng)建設(shè)、營(yíng)銷型網(wǎng)站制作、響應(yīng)式網(wǎng)站、展示型網(wǎng)站制作、網(wǎng)站建設(shè)等服務(wù),幫助中小企業(yè)通過網(wǎng)站體現(xiàn)價(jià)值、有效益。幫助企業(yè)快速建站、解決網(wǎng)站建設(shè)與網(wǎng)站營(yíng)銷推廣問題。
推薦閱讀:JavaScript DOM的本質(zhì)及操作方法
使用DOM
考慮一個(gè)html文件:
測(cè)試 測(cè)試
1.訪問節(jié)點(diǎn)
◆訪問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);
判斷節(jié)點(diǎn)間關(guān)系:
- alert(oHead.parentNode==oHtml);
- alert(oBody.previousSibling==oHead);
- alert(oHead.nextSibling==oBody);
- alert(oHead.ownerDocument==document);
2.檢測(cè)節(jié)點(diǎn)類型
通過節(jié)點(diǎn)的nodeType屬性來檢驗(yàn)節(jié)點(diǎn)類型:
- alert(document.nodeType); //輸出9
需要注意的是,DOM兼容的瀏覽器(以FF2.0為例),擁有Node.DOCUMENT_NODE、Node.ELEMENT_NODE等常量。各常量名稱與數(shù)值對(duì)照表如下:
- 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不支持,不過你可以自定義一個(gè)JavaScript對(duì)象Node。
3.處理特性
處理特性可以使用標(biāo)準(zhǔn)的NameNodeMap中的方法:
- getNamedItem(name) removeNamedItem(name) setNamedItem(node) item(pos)
比如:
測(cè)試
,假設(shè)變量oP是上面的p節(jié)點(diǎn)的引用,我們要訪問oP的id屬性:
- var sId=oP.attributes.getNamedItem("id").nodeValue;
這些方法用起來很累贅,所以DOM又定義了三個(gè)方法來簡(jiǎn)化:
- getAttribute(name) ——返回名稱為name的屬性的值
- setAttribute(name,value) ——顧名思義
- removeAttribute(name) ——顧名思義
上面的例子可以改寫為:
- var sId=oP.getAttribute("name");
4.訪問指定節(jié)點(diǎn)
熟知的getElementByTagName(name),getElementByName(name),getElementById(id)三個(gè)方法,不再展開。
#p#
5.創(chuàng)建和操作節(jié)點(diǎn)
(1)創(chuàng)建新節(jié)點(diǎn),一張IE(6.0)和FF對(duì)DOM Level1的創(chuàng)建新節(jié)點(diǎn)方法支持的對(duì)照表:
- 方法 IE FF
- createAttribute(name) Y Y
- createCDATASection(text) N Y
- createComment(text) Y Y
- createDocumentFragment() Y Y
- createElement(tagName) Y Y
- createEntityReference(name) N Y
- createProcessingInstruction(
- target,data) N Y
- createTextNode(text) Y Y
(2)createElement(),createTextNode(),appendChild()
- 例子:
createElement() Example
在頁面載入后,創(chuàng)建節(jié)點(diǎn)oP,并創(chuàng)建一個(gè)文本節(jié)點(diǎn)oText,oText通過appendChild方法附加在oP節(jié)點(diǎn)上,為了實(shí)際顯示出來,將oP節(jié)點(diǎn)通過appendChild方法附加在body節(jié)點(diǎn)上。此例子將顯示Hello World!
(3)removeChild(),replaceChild()和insertBefore()
從方法名稱就知道是干什么的:刪除節(jié)點(diǎn),替換節(jié)點(diǎn),插入節(jié)點(diǎn)。需要注意的是replaceChild和insertBefore兩個(gè)參數(shù)都是新節(jié)點(diǎn)在前,舊節(jié)點(diǎn)在后。
(4)createDocumentFragment()
此方法主要是為了解決大量添加節(jié)點(diǎn)時(shí),速度過慢。通過創(chuàng)建一個(gè)文檔碎片節(jié)點(diǎn),將要添加的新節(jié)點(diǎn)附加在此碎片節(jié)點(diǎn)上,然后再將文檔碎片節(jié)點(diǎn)append到body上面,替代多次append到body節(jié)點(diǎn)。
insertBefore() Example
HTML DOM的特征功能
HTML DOM的特性和方法不是標(biāo)準(zhǔn)的DOM實(shí)現(xiàn),是專門針對(duì)HTML同時(shí)也讓一些DOM操作變的更加簡(jiǎn)便。
1.讓特性像屬性一樣
訪問某元素的特性需要用到getAttribute(name)方法,HTML DOM擴(kuò)展,可以直接使用同樣名稱的屬性來獲取和設(shè)置這些值,比如:
2.table的系列方法:
為了簡(jiǎn)化創(chuàng)建表格,HTML DOM提供了一系列的表格方法,常用幾個(gè):
◆cells ——返回元素中的所有單元格
◆rows ——表格中所有行的集合
◆insertRow(position) ——在rows集合中指定位置插入新行
◆deleteRow(position) ——與insertRow相反
◆insertCell(position) ——在cells集合的指定位置插入一個(gè)新的單元格
◆deleteCell(position) ——與insertCell相反
遍歷DOM
DOM的遍歷是DOM Level2中提出的標(biāo)準(zhǔn),IE6沒有實(shí)現(xiàn),Mozilla和Safari已經(jīng)實(shí)現(xiàn),最新IE7不清楚是否實(shí)現(xiàn)。
網(wǎng)頁名稱:在JavaScript中如何實(shí)現(xiàn)DOM操作
網(wǎng)站鏈接:http://www.5511xx.com/article/ccoceoo.html


咨詢
建站咨詢
