JS--DOM(一)

DOM(文檔對象模型)是針對HTML和XML文檔的一個API。其描述的是一種層次化的節點樹。為基本的文檔結構和查詢提供了接口。注意:IE中所有的DOM對象都是以COM對實現的,所以和原生JavaScript對象的行為并不太一致。

一、節點層次

DOM可以將任何HTML或者XML文檔描繪成一個由多層節點構成的結構,文檔節點是每個文檔的根節點,文檔節點只有一個子節點即html元素,我們稱之為文檔元素。

二、Node類型

DOM1級定義了一個Node接口,該接口由DOM中所有的節點類型實現,這個Node接口在JavaScript中是作為Node類型實現的。(除IE其他瀏覽器都可以訪問這個類型。)JavaScript中所有節點類型都繼承該Node類型。因此所有節點類型都共享著相同的基本屬性和方法。

Node.ELEMENT_NODE(1) / Node.ELEMENT_NODE(2)...

nodeType屬性:表明節點的類型。1表示元素節點,2表示屬性節點,3表示文本節點等等一共有12中節點屬性。所以我們判斷某個節點類型的時候可以通過和Node.ELEMENT_NODE等這些屬性進行比較,但是為了兼容IE的話,我們最好通過和確切的數值進行比較。

nodeNamenodeValue屬性:這兩個屬性的值要取決于節點的類型。對于元素節點,nodeName返回的是節點的標簽名,nodeValue返回的是null。

節點關系:

childNode屬性:每個節點都有一個childNode屬性,其中保存著一個NodeList對象。NodeList是一種類數組對象,用于保存一組有序的節點。可以通過類似于數組訪問元素的方法去訪問NodeList中的元素,而且NodeList也有一個length屬性,但是其并不是一個Array實例。其實際上是基于DOM結構動態執行查詢的結果。


這里介紹一個item(i)方法,它可以返回節點列表中第i個索引節點,類似于[ i ]。我們還可以通過Array.prototype.slice.call(box.childNodes, 0)將這個節點列表轉換為數組。

parentNode屬性:每個節點都有一個parentNode屬性,該屬性指向文檔樹種的父節點,前面說的包含在同一個childNodes列表的中的元素都具有同一個父節點。

previousSibling和nextSibling屬性:previousSibling屬性表示某個節點的前一個兄弟節點,nextSibling表示某個節點的后一個兄弟節點,如果沒有的話則返回為null。

firstChild和lastChild屬性:這兩個屬性分別指向的是childNodes中的第一個和最后一個節點,someNode,firstChild等于someNode.childNodes[0],someNode.lastChild等于someNode.childNode[someNode.childNode.length - 1]。

hasChildNodes()方法:這個方法在節點包含一個或多個子節點的情況下返回true,否則返回false。

ownerDocument屬性:每個節點都會有這個屬性,該屬性指向表示整個文檔的文檔節點。

操作節點:

appendChild()方法:用于向childNodes列表末尾添加一個節點。添加節點后,childNodes列表的關系指針都會發生更新,更新完成后appendChild()返回新增的節點。如果傳入appendChild()中的節點是文檔中的一部分,那么就是將該節點從原來的位置轉移到新的位置。

insertBefore()方法:如果需要將某個節點插入到childNodes中某個特定的位置上,就使用該方法。該方法接受兩個參數,要插入的節點和作為參考的節點。最后返回的是插入的元素。

若第二個參數傳為Null,則插入到最后一位,成為最后一個子節點。還有一個inserAfter()方法,原理和insertBefore()方法一樣,只是向后面一位插入節點。


replaceChild()方法:表示替換某一個節點,接受兩個參數,要插入的節點和要替換的節點。要替換的節點將由這個方法返回并從文檔樹種剔除。同時由要插入的節點占據其位置。

removeChild()方法:如果想移除某個節點而不是替換某個節點可以利用該方法。這個方法接受一個參數,即要移除的節點,被移除的節點將成為方法的返回值。與replaceChild()方法一樣,移除的節點任然為文檔所擁有,只不過在文檔中沒有自己的位置了。

總結以上四個方法:介紹的這幾種方法都是操作某個節點的子節點。所以說必須先取得他們的父節點parentNode屬性。

cloneNode()方法:表示復制某個節點,其有一個參數是可選的,如果傳入TRUE,表示深復制,就是復制節點以及整個子節點樹。如果淺復制則不傳參數,返回的副本屬于文檔所有。IE中會存在復制到該節點的事件處理程序,建議先清除事件在進行復制。

normalize()方法:處理文檔樹中的文本節點。由于解析器或者DOM操作的原因可能會導致文本節點中不包括文本,或者出現兩個文本節點的情況,當在某個節點上調用該方法的時候,就會在該節點的后代節點中查找上述兩種情況,如果找到空文本節點則會刪除,如果找到相鄰的文本節點則會進行合并。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容