日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
淺談DOM文檔對(duì)象模型基礎(chǔ)

一、DOM基礎(chǔ)

創(chuàng)新互聯(lián)公司是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設(shè)公司,自成立以來公司不斷探索創(chuàng)新,始終堅(jiān)持為客戶提供滿意周到的服務(wù),在本地打下了良好的口碑,在過去的10年時(shí)間我們累計(jì)服務(wù)了上千家以及全國政企客戶,如成都圍欄護(hù)欄等企業(yè)單位,完善的項(xiàng)目管理流程,嚴(yán)格把控項(xiàng)目進(jìn)度與質(zhì)量監(jiān)控加上過硬的技術(shù)實(shí)力獲得客戶的一致稱譽(yù)。

1.節(jié)點(diǎn)(node)層次

Document--最頂層的節(jié)點(diǎn),所有的其他節(jié)點(diǎn)都是附屬于它的。
DocumentType--DTD引用(使用語法)的對(duì)象表現(xiàn)形式,它不能包含子節(jié)點(diǎn)。
DocumentFragment--可以像Document一樣來保存其他節(jié)點(diǎn)。
Element--表示起始標(biāo)簽和結(jié)束標(biāo)簽之間的內(nèi)容,例如或者。這是唯一可以同時(shí)包含特性和子節(jié)點(diǎn)的節(jié)點(diǎn)類型。
Attr--代表一對(duì)特性名和特性值。這個(gè)節(jié)點(diǎn)類型不能包含子節(jié)點(diǎn)。
Text--代表XML文檔中的在起始標(biāo)簽和結(jié)束標(biāo)簽之間,或者CDataSection內(nèi)包含的普通文本。這個(gè)節(jié)點(diǎn)類型不能包含子節(jié)點(diǎn)。
CDataSection--的對(duì)象表現(xiàn)形式。這個(gè)節(jié)點(diǎn)類型僅能包含文本節(jié)點(diǎn)Text作為子節(jié)點(diǎn)。
Entity--表示在DTD中的一個(gè)實(shí)體定義,例如。這個(gè)節(jié)點(diǎn)類型不能包含子節(jié)點(diǎn)。
EntityReference--代表一個(gè)實(shí)體引用,例如"。這個(gè)節(jié)點(diǎn)類型不能包含子節(jié)點(diǎn)。
ProcessingInstruction--代表一個(gè)PI。這個(gè)節(jié)點(diǎn)類型不能包含子節(jié)點(diǎn)。
Comment--代表XML注釋。這個(gè)節(jié)點(diǎn)不能包含子節(jié)點(diǎn)。
Notation--代表在DTD中定義的記號(hào)。這個(gè)很少用到。

Node接口定義了所有節(jié)點(diǎn)類型都包含的特性和方法。

特性/方法類型/返回類型說明
nodeNameString節(jié)點(diǎn)的名字;根據(jù)節(jié)點(diǎn)的類型而定義
nodeValueString節(jié)點(diǎn)的值;根據(jù)節(jié)點(diǎn)的類型而定義
nodeTypeNumber節(jié)點(diǎn)的類型常量值之一
ownerDocumentDocument指向這個(gè)節(jié)點(diǎn)所屬的文檔
firstChildNode指向在childNodes列表中的***個(gè)節(jié)點(diǎn)
lastChildNode指向在childNodes列表中的***一個(gè)節(jié)點(diǎn)
childNodesNodeList所有子節(jié)點(diǎn)的列表
previousSiblingNode指向前一個(gè)兄弟節(jié)點(diǎn);如果這個(gè)節(jié)點(diǎn)就是***個(gè)兄弟節(jié)點(diǎn),那么該值為null
nextSiblingNode指向后一個(gè)兄弟節(jié)點(diǎn);如果這個(gè)節(jié)點(diǎn)就是***一個(gè)兄弟節(jié)點(diǎn),那么該值為null
hasChildNodes()Boolean當(dāng)childNodes包含一個(gè)或多個(gè)節(jié)點(diǎn)時(shí),返回真
attributesNamedNodeMap包含了代表一個(gè)元素的特性的Attr對(duì)象;僅用于Element節(jié)點(diǎn)
appendChild(node)Node將node添加到childNodes的末尾
removeChild(node)Node從childNodes中刪除node
replaceChild(newnode,oldnode)Node將childNodes中的oldnode替換成newnode
insertBefore(newnode,refnode)Node在childNodes中的refnode之前插入newnodd

除節(jié)點(diǎn)外,DOM還定義了一些助手對(duì)象,它們可以和節(jié)點(diǎn)一起使用,但不是DOM文檔必有的部分。

NodeList--節(jié)點(diǎn)數(shù)組,按照數(shù)值進(jìn)行索引;用來表示和一個(gè)元素的子節(jié)點(diǎn)。

NamedNodeMap--同時(shí)使用數(shù)值和名字進(jìn)行索引的節(jié)點(diǎn)表;用于表示元素特性。

2.訪問相關(guān)的節(jié)點(diǎn)

下面的幾節(jié)中考慮下面的HTML頁面

 
 
 
  1.  
  2.      
  3.         DOM Example 
  4.      
  5.      
  6.         

    Hello World!

     
  7.         

    Isn't this exciting?

     
  8.         

    You're learning to use the DOM!

     
  9.      
  10.  

要訪問元素(你應(yīng)該明白這是該文件的document元素),你可以使用document的documentElement特性:

 
 
 
  1. var oHtml = document.documentElement; 

現(xiàn)在變量oHtml包含一個(gè)表示的HTMLElement對(duì)象。如果你想取得和元素,下面的可以實(shí)現(xiàn):

 
 
 
  1. var oHead = oHtml.firstChild;  
  2. var oBody = oHtml.lastChild; 

也可以使用childNodes特性來完成同樣的工作。只需把它當(dāng)成普通的javascript array,使用方括號(hào)標(biāo)記:

 
 
 
  1. var oHead = oHtml.childNodes[0];  
  2. var oBody = oHtml.childNodes[1]; 

注意方括號(hào)標(biāo)記其實(shí)是NodeList在javascript中的簡(jiǎn)便實(shí)現(xiàn)。實(shí)際上正式的從childNodes列表中獲取子節(jié)點(diǎn)的方法是使用item()方法:

 
 
 
  1. var oHead = oHtml.childNodes.item(0);  
  2. var oBody = oHtml.childNodes.item(1); 

HTML DOM頁定義了document.body作為指向元素的指針。

 
 
 
  1. var oBody = ducument.body; 

有了oHtml,oHead和oBody這三個(gè)變量,就可以嘗試確定它們之間的關(guān)系:

 
 
 
  1. alert(oHead.parentNode==oHtml);  
  2. alert(oBody.parentNode==oHtml);  
  3. alert(oBody.previousSibling==oHead);  
  4. alert(bHead.nextSibling==oBody);  
  5. alert(oHead.ownerDocument==document); 

以上均outputs "true"。

3.處理特性

正如前面所提到的,即便Node接口已具有attributes方法,且已被所有類型的節(jié)點(diǎn)繼承,然而,只有

Element節(jié)點(diǎn)才能有特性。Element節(jié)點(diǎn)的attributes屬性其實(shí)是NameNodeMap,它提供一些用于訪問和處理其內(nèi)容的方法:

getNamedItem(name)--返回nodename屬性值等于name的節(jié)點(diǎn);

removeNamedItem(name)--刪除nodename屬性值等于name的節(jié)點(diǎn);

setNamedItem(node)--將node添加到列表中,按其nodeName屬性進(jìn)行索引;

item(pos)--像NodeList一樣,返回在位置pos的節(jié)點(diǎn);

注:請(qǐng)記住這些方法都是返回一個(gè)Attr節(jié)點(diǎn),而非特性值。

NamedNodeMap對(duì)象也有一個(gè)length屬性來指示它所包含的節(jié)點(diǎn)的數(shù)量。

當(dāng)NamedNodeMap用于表示特性時(shí),其中每個(gè)節(jié)點(diǎn)都是Attr節(jié)點(diǎn),這的nodeName屬性被設(shè)置為特性名稱,而nodeValue屬性被設(shè)置為特性的值。例如,假設(shè)有這樣一個(gè)元素:

 
 
 
  1. Hello world!

     

同時(shí),假設(shè)變量oP包含指向這個(gè)元素的一個(gè)引用。于是可以這樣訪問id特性的值:

 
 
 
  1. var sId = oP.attributes.getNamedItem("id").nodeValue; 

當(dāng)然,還可以用數(shù)值方式訪問id特性,但這樣稍微有些不直觀:

 
 
 
  1. var sId = oP.attributes.item(1).nodeValue; 

還可以通過給nodeValue屬性賦新值來改變id特性:

 
 
 
  1. oP.attributes.getNamedItem("id").nodeValue="newId"; 

Attr節(jié)點(diǎn)也有一個(gè)完全等同于(同時(shí)也完全同步于)nodeValue屬性的value屬性,并且有name屬性和nodeName屬性保持同步。我們可以隨意使用這些屬性來修改或變更特性。

因?yàn)檫@個(gè)方法有些累贅,DOM又定義了三個(gè)元素方法來幫助訪問特性:

getAttribute(name)--等于attributes.getNamedItem(name).value;
setAttribute(name,newvalue)--等于attribute.getNamedItem(name).value=newvalue;
removeAttribute(name)--等于attribute.removeNamedItem(name)。

4.訪問指定節(jié)點(diǎn)

(1)getElementsByTagName()

核心(XML) DOM定義了getElementsByTagName()方法,用來返回一個(gè)包含所有的tagName(標(biāo)簽名)特性等于某個(gè)指定值的元素的NodeList。在Element對(duì)象中,tagName特性總是等于小于號(hào)之后緊跟隨的名稱--例如,的tagName是"img"。下一行代碼返回文檔中所有元素的列表:

 
 
 
  1. var oImgs = document.getElementsByTagName("img"); 

把所有圖形都存于oImgs后,只需使用方括號(hào)或者Item()方法(getElementsByTagName()返回一個(gè)和childNodes一樣的NodeList),就可以像訪問子節(jié)點(diǎn)那樣逐個(gè)訪問這些節(jié)點(diǎn)了:

 
 
 
  1. alert(oImgs[0].tagName); //outputs "IMG" 

假如只想獲取在某個(gè)頁面***個(gè)段落的所有圖像,可以通過對(duì)***個(gè)段落元素調(diào)用getElementsByTagName()來完成,像這樣:

 
 
 
  1. var oPs = document.getElementByTagName("p");  
  2. var oImgsInp = oPs[0].getElementByTagName("img"); 

可以使用一個(gè)星號(hào)的方法來獲取document中的所有元素:

 
 
 
  1. var oAllElements = document.getElementsByTagName("*"); 

當(dāng)參數(shù)是一個(gè)星號(hào)的時(shí)候,IE6.0并不返回所有的元素。必須使用document.all來替代它。

(2)getElementsByName()

HTML DOM 定義了getElementsByName(),這用來獲取所有name特性等于指定值的元素的。

(3)getElementById()

這是HTML DOM定義的第二種方法,它將返回id特性等于指定值的元素。在HTML中,id特性是唯一的--這意味著沒有兩個(gè)元素可以共享同一個(gè)id。毫無疑問這是從文檔樹中獲取單個(gè)指定元素最快的方法。

注:如果給定的ID匹配某個(gè)元素的name特性,IE6.0還會(huì)返回這個(gè)元素。這是一個(gè)bug,也是必須非常小心的一個(gè)問題。

5.創(chuàng)建新節(jié)點(diǎn)

最常用到的幾個(gè)方法是

createDocumentFragment()--創(chuàng)建文檔碎片節(jié)點(diǎn)

createElement(tagname)--創(chuàng)建標(biāo)簽名為tagname的元素

createTextNode(text)--創(chuàng)建包含文本text的文本節(jié)點(diǎn)

createElement()、createTextNode()、appendChild()

 
 
 
  1.  
  2.      
  3.         createElement() Example 
  4.          
  5.      
  6.      
  7.      
  8.  

removeChild()、replaceChild()、insertBefore()刪除節(jié)點(diǎn)

 
 
 
  1.  
  2.      
  3.         removeChild() Example 
  4.          
  5.      
  6.      
  7.         

    Hello World!

     
  8.      
  9.  

替換

 
 
 
  1.  
  2.      
  3.         replaceChild() Example 
  4.          
  5.      
  6.      
  7.         

    Hello World!

     
  8.      
  9.  

新消息添加到舊消息之前

 
 
 
  1.  
  2.      
  3.         insertBefore() Example 
  4.          
  5.      
  6.      
  7.         

    Hello World!

     
  8.      
  9.  

createDocumentFragment()

一旦把節(jié)點(diǎn)添加到document.body(或者它的后代節(jié)點(diǎn))中,頁面就會(huì)更新并反映出這個(gè)變化。對(duì)于少量的更新,這是很好的,然而,當(dāng)要向document添加大量數(shù)據(jù)時(shí),如果逐個(gè)添加這些變動(dòng),這個(gè)過程有可能會(huì)十分緩慢。為解決這個(gè)問題,可以創(chuàng)建一個(gè)文檔碎片,把所有的新節(jié)點(diǎn)附加其上,然后把文檔碎片的內(nèi)容一次性添加到document中,假如想創(chuàng)建十個(gè)新段落。

 
 
 
  1.  
  2.      
  3.         insertBefore() Example 
  4.          
  5.      
  6.      
  7.  
  8.      
  9.  

6.讓特性像屬性一樣

大部分情況下,HTML DOM元素中包含的所有特性都是可作為屬性。

假設(shè)有如下圖像元素:

 
 
 
  1.  

如果要使用核心的DOM來獲取和設(shè)置src和border特性,那么要用getAttribute()和setAttribute()方法:

 
 
 
  1. alert(oImg.getAttribute("src"));  
  2. alert(oImg.getAttribute("border"));  
  3. oImg.setAttribute("src","mypicture2.jpg");  
  4. oImg.setAttribute("border",1); 

然而,使用HTML DOM,可以使用同樣名稱的屬性來獲取和設(shè)置這些值:

 
 
 
  1. alert(oImg.src);  
  2. alert(oImg.border);  
  3. oImg.src="mypicture2.jpg";  
  4. oImg.border ="1"; 

唯一的特性名和屬性名不一樣的特例是class屬性,它是用來指定應(yīng)用于某個(gè)元素的一個(gè)CSS類,因?yàn)閏lass在ECMAScript中是一個(gè)保留字,在javascript中,它不能被作為變量名、屬性名或都函數(shù)名。于是,相應(yīng)的屬性名就變成了className;

注:IE在setAttribute()上有很大的問題,***盡可能使用屬性。

7.table方法

為了協(xié)助建立表格,HTML DOM給

,和等元素添加了一些特性和方法。
元素添加了以下內(nèi)容:

元素的集合元素(如果存在)元素(如果存在)元素并將其放入表格元素并將其放入表格元素元素
特性/方法說明
caption指向
元素并將其放入表格
tBodies
tFoot指向
tHead指向
rows表格中所有行的集合
createTHead()創(chuàng)建
createTFood()創(chuàng)建
createCpation()創(chuàng)建
元素并將其放入表格
deleteTHead()刪除
deleteTFood()刪除
deleteCaption()刪除
元素
deleteRow(position)刪除指定位置上的行
insertRow(position)在rows集合中的指定位置上插入一個(gè)新行

元素添加了以下內(nèi)容

中所有行的集合
特性/方法說明
rows
deleteRow(position)刪除指定位置上的行
insertRow(position)在rows集合中的指定位置上插入一個(gè)新行

元素添加了以下內(nèi)容

元素中所有的單元格的集合
特性/方法說明
cells
deleteCell(postion)刪除給定位置上的單元格
insertCell(postion)在cells集合的給點(diǎn)位置上插入一個(gè)新的單元格

8.遍歷DOM

NodeIterator,TreeWalker

DOM Level2的功能,這些功能只有在Mozilla和Konqueror/Safari中才有,這里就不介紹了。


網(wǎng)頁題目:淺談DOM文檔對(duì)象模型基礎(chǔ)
URL地址:http://m.5511xx.com/article/ccoepsi.html