所有的節點都繼承自Node類型,因此所有的節點都具有Node類型的所有屬性和方法。
Node類型的屬性
1 nodeType:通過nodeType可以確定一個節點屬於那一個類型的節點。
nodeType的值有兩種,一種是用數字表示節點的類型,另一種是用字符常量來表示,因為第二種方法在IE瀏覽器中不適用,所以全部使用第一種方
法來表示。
其中nodeType的值為1代表是元素節點,即各種標簽
nodeType的值為9代表文檔節點,即document節點
nodeType的值為3代表文本節點,即標簽內部的文字
nodeType的值為8代表注釋節點
nodeType的值為10代表documentFragment節點
nodeType的值為11代表特性節點,即標簽內部的sytle,id,class等特性的節點
舉例:<input type="button" value="aaa" id="_2"></input>
var a=document.getElementsById("_2");
if(a.nodeType==1)......//a的nodeType的值為true
2 nodeValue和nodeName:不同的節點的這兩個屬性的值是不同的,document的nodeName就為“#document”而nodeValue為null,
文本節點的nodeName為“#text”,nodeValue為文本節點中文本的值
在后續的文章中,會在具體的節點中進行分別介紹
3 childNodes:這個屬性對應一個NodeList類型的對象,表示某個節點的所有子節點
可以使用[]或者item()的方法獲得某個具體的子節點,length可以獲取子節點的個數
設定element為某個具有子節點的節點,假設它有三個子節點
element.childNodes[0]或者element.iten(0)代表它的第一個子節點,2,3代表第2,第3個子節點
element.chileNodes.length 代表子節點的個數,這里等於3
childNodes雖然和Array有着類似的方法,但是它不是Array類型,是隨着節點的不同的操作動態變化的,這一點在NodeList中再進行介紹
如果想要把childNodes類型轉化為Array類型,可以用call()方法來實現
var ch=Array.prototype.slice.call(element.childNodes,0);
此時,ch就變成了一個Array類型,同時數組中的內容就是element.chileNodes中的內容
因為在IE8之前,DOM對象為COM對象,所以在IE8之前不能用js或者DOM的方法,如果想執行上述的操作,必須將二者分開
即
4
parentNode:表示某個節點的父節點
firstNode:表示某個節點的第一個孩子節點
lastNode:表示某個節點的最后一個孩子節點
previousSibling:表示某個節點的上一個同胞節點
nextSibling:表示某個節點的下一個同胞節點
關系圖如下
5 hasChildNodes()方法:返回true或false,某個元素是否有孩子節點
element代表某個節點
element.hasChileNodes()
6 ownerDocument
所有節點的ownerDocument屬性都指向文檔元素,即html。
element代表任何一個節點,element.ownerDocument就是html元素,這樣可以不用層層尋找,直接跳轉到頁面頂端
Node類型中的方法
<html>
<body>
<div>
<img></img>
</div>
</body>
</html>
1 appendChild:在父節點的childNodes末尾加入一個節點
var dd=document.getElementsByTagName("div");
var ins=document.createElement("a")//創建了一個a標簽
dd[0].appendChild(ins)//這樣便把<a>標簽插入了div的chileNodes的末尾,相當於在img后面加了一個<a>標簽
2 removeChild:移除某個節點的子節點
var dd=document.getElementsByTagName("div");
var ins=document.getElementsByTagName("img")//創建了一個a標簽
dd[0].removeChild(ins[0])//將div的子節點img移除
或者dd[0].remove(dd[0].firstChild)
3 insertBefore:將某個節點插入父節點的另一個子節點之前
var dd=document.getElementsByTagName("div");
var ins=document.createElement("a")//創建了一個a標簽
dd[0].insertBefore(ins,bb[0].firstChild)//將a插入了img之前
4 replaceChild:用一個新的元素,將其父節點的某個子節點的元素替換掉
var dd=document.getElementsByTagName("div");
var ins=document.createElement("a")//創建了一個a標簽
dd[0].replaceChild(ins,bb[0].firstChild)//用a替換了img
5 cloneNode():復制節點(樹)
接收一個參數,true或false,如果為true,則復制節點以及它所有的后代節點
如果為false,則只復制這一個節點
var dd=document.getElementsByTagName("div");
如果dd.cloneChild(true)則復制的為div節點以及img節點
如果 dd.cloneChild(false)則只復制div節點
var clone=dd .cloneChild(true)//此時clone中存儲着整個div的節點樹,但只是存儲在clone中
如果想與整個html文檔發生關聯,則需要將clone插入文檔中,用appendChild等方法。