DOM下的節點屬性和操作

DOM(文檔對象模型)是由W3C制定的一套訪問和操作XML(eXtensible Markup Language)文檔的標準,即API。比如DOM告訴JavaScript引擎如何在瀏覽器窗口中顯示和操作XML創建的標記(Tag)。

DOM與特定的平臺、瀏覽器、語言無關,很多種語言都實現了DOM,比如JavaScript和PHP都實現了DOM,所以 JavaScript中有getElementsByTagName()方法,PHP中也有 getElementsByTagName(),getElementsByTagName()方法是DOM規定的訪問XML文檔的接口。

XML與HTML相似,但兩者是有區別。XML和HTML都來自於SGML,它們都含有標記,有着相似的語法,HTML和XML的最大區別在於:HTML是一個定型的標記語言,用固定的標記來描述和顯示數據,比如<h1>表示首行標題,有固定的尺寸;而XML沒有固定的標記,只能通過自定義的標記來描述數據的形式和結構,而不能顯示。HTML是將數據 和顯示混在一起,而XML則是將數據和顯示分開來。那爲什麼能使用DOM訪問和操作HTML文檔(即網頁)呢?Web語義化的一個發展方向是將HTML逐漸演變爲更有語義、能將數據內容與現實分離的XML,但HTML不可能立即演變爲XML,目前推薦使用的是一個過渡產物——XHTML。HTML與 XHTML網頁形成的節點樹在結構上與XML節點樹一樣,可以看做是一個符合DOM的XML文檔,因此可以使用實現了DOM的程序語言來訪問和操作HTML文檔,即訪問和操作那些節點,節點樹的結構如下圖所示。

由於HTML與XML的相似性及差異,JavaScript不僅實現了標準的DOM方法和屬性(即由W3C制定的),而且還實現了HTML特有的 DOM方法和屬性,前者稱爲Core DOM,並不專屬於JavaScript,後者稱爲HTML-DOM。不管是Core DOM還是HTML-DOM,我們在使用JavaScript的時候要注意瀏覽器之間的兼容性,因爲不同的瀏覽器對這兩類方法和屬性的支持可能不一樣。 這裏不詳談Core DOM和HTML-DOM,以及跨瀏覽器兼容性,教材上都有詳細描述。但一般推薦使用Core DOM方法和屬性,儘管稍顯繁雜。

常見的Core DOM屬性和方法如下

屬性:

1 .nodeName

節點名稱,相當於tagName.屬性節點返回屬性名,文本節點返回#text。nodeName是隻讀的。

2 .nodeType

值:1,元素節點;2,屬性節點;3,文本節點。nodeType是隻讀的。
3 .nodeValue
返回一個字符串,指示這個節點的值。元素節點返回null,屬性節點返回屬性值,文本節點返回文本。nodeValue可讀可寫,這是對元素節點不能寫。一般只用於設置文本節點的值。
4 .childNodes
返回子節點數組。文本和屬性節點的childNodes永遠是null。可以用hasChildNodes()來判斷是否有子節點。只讀屬性,要刪除添加節點可不能用操作childNodes數組的辦法呃。
5 .firstChild
返回第一個子節點。文本和屬性節點沒有子節點,會返回一個空數組,這是針對這二位的特殊待遇。對於元素節點,若是沒有子節點會返回null.有一個等價式:firstChild=childNodes[0].
6 .lastChild
返回最後一個子節點。返回值同firstChild,三方待遇參考上面。有一個等價式:lastChide=childNodes[childNodes.length-1].
7 .nextSibling()
返回節點的下一個兄弟節點。如果沒有下一個兄弟節點的話,返回null。只讀屬性,不可以更改應用。

8 .previousSibling()
返回節點的上一個兄弟節點。

9 .parentNode()
返回節點的父節點。document.parentNode()返回null,其他的情況下都將返回一個元素節點,因爲只有元素節點擁有子節點,出了document外任何節點都擁有父節點。parentNode(),又是一個只讀的傢伙。

操作:

1. 創建節點
createElement('tagName');
如:var oP=document.createElement('p');創建了一個<p></p>標籤。
2. 創建文本節點
createTextNode('text');
如:var oText=document.createTextNode('This is a paragh!');
3. 附加子節點
appendChild(o);其中o爲節點對象。
如:document.body.appendChildNode(o);在body末尾追加
document.forms[0].appendChildNode(o);在form表單末尾追加
oP.appendChildNode(o);在元素內部的末尾追加,其總oP爲節點對象。
4. 創建文檔片斷
createDocumentFragment();
如:var oF=document.createDocumentFragment();
5. 刪除節點
removeChild(oP);
如:document.body.removeChild(oP),從body中移除oP節點對象。
6. 替換節點
replaceChid(newOp,targetOp);將目標節點targetOp替換爲newOp
如:document.body.replayChild(oPa,oPb).ps:怎會這樣特殊?源和目地操作數都是參數,爲何調用者是document.body?記住先,別多管。——被替換的必須是body的子節點,可以用其他element替代document.body,前提一樣,被替換的要是這個element的子節點。
7. 插入節點
insertBefor(newOp,targetOp);
insertAfter(newOp,targetOp);
8. 設置或得到屬性節點 
setAttribute('key','value');
getAttribute('key','value')
9.複製節點。
cloneNode(true/false)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章