亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

DOM-Node類型

發布時間:2020-06-10 20:40:08 來源:網絡 閱讀:317 作者:吳金瑞 欄目:網絡安全

    

DOM(文檔隊形模型)是針對HTML和XML文檔的一個API(應用程序編程接口)。DOM描繪了一個層次化的節點樹,允許開發人員添加,移除和修改頁面的一部分。DOM可以講任何HTML和XML文檔描繪成一個有多層次節點構成的結構。節點分為幾種不同的類型,每種類型分別表示文檔中不同的信息。每個節點都擁有各自的特點、數據和方法,另外也與其他節點存在某種關系。節點之間的關系構成了層次,而所有頁面標記則表現為一個以特定節點為根節點的樹形結構。總共有12種節點類型,這些類型都繼承自一個基類型-Node類型

Node類型

DOM1級定義了一個Node接口,Javascript中的所有節點類型都繼承自Node類型,因此所有節點類型都共享著相同的基本屬性和方法,每個節點都有一個nodeType屬性,用于表明節點的類型。節點類型由在Node類型中定義的下列12個數值常量來表示,任何節點類型必居其一:

Node.ELEMENT_NODE (1) 
Node.ATTRIBUTE_NODE (2) 
Node.TEXT_NODE (3) 
Node.CDATA_SECTION_NODE (4) 
Node.ENTITY_REFERENCE_NODE (5) 
Node.ENTITY_NODE (6) 
Node.PROCESSING_INSTRUCTION_NODE (7) 
Node.COMMENT_NODE (8) 
Node.DOCUMENT_NODE (9) 
Node.DOCUMENT_TYPE_NODE (10) 
Node.DOCUMENT_FRAGMENT_NODE (11) 
Node.NOTATION_NODE (12)

通過比較上面這些常量,可以很容易的確定節點的類型

1         if(someNode.nodeType == Node.ELEMENT_NODE){ //在IE中無效2             alert("Node is an element");3         }

 

為了確保跨瀏覽器兼容,最好還是將nodeType屬性與數字值比較

1         if(someNode.nodeType == 1){ 
2             alert("Node is an element");3         }

1、nodeName和nodeValue屬性

要了解節點的具體屬性,可以使用這兩個屬性,他們的值完全取決于節點的類型,在使用這兩個值之前,最好是像下面這樣先檢測一下節點的類型

1         if(someNode.nodeType == 1){2             value = someNode.nodeName; //nodeName的值是元素的標簽名3         }

2、節點關系

每個節點都有一個childNodes屬性,其中保存著一個NodeList對象。NodeList是一種類數組對象,用于保存一組有序的節點,可以通過為止來訪問這些節點。要注意他不是Array的實例,他實際上是基于DOM結構動態執行查詢的結果,因此DOM結構的變化能夠自動反映在NodeList對象中,要訪問NodeList中的節點可以通過方括號,也可以使用item()方法,另外也與其他節點存在某種關系。節點之間的關系構成了層次,而所有頁面標記則表現為一個以特定節點。

1         var fitstChild = sonmeNode.childNodes[0];2         var secondChild = someNode.childNodes.item(1);3         var count = someNode.childNodes.length;

在前面介紹過,對arguments對象使用Array.prototype.slice()方法可以將其轉換為數組,對于NodeList也適用。

DOM-Node類型

 1         //在IE8及之前版本無效 2         var arrayOfNodes = Array.prototype.alice.call(someNode.childNodes,0); 3  4         //兼容所有瀏覽器 5         function converToArray(nodes){ 6             var array = null; 7             try{ 8                 array = Array.prototype.slice.call(nodes,0); //針對非IE瀏覽器 9             }catch(ex){10                 array = new Array();11                 for(var i=0,len = nodes.length;i < len; i++){12                     array.push(nodes[i]);13                 }14             }15             return array;16         }

DOM-Node類型

每一個節點都有一個parentNode屬性,該屬性指向文檔樹中的父節點。包含在childNodes列表中的所有節點都具有相同的父節點,因此他們的paternNode屬性都指向同一個節點。此外包含在childNodes列表中的每個節點相互之間都是同胞節點。通過使用列表中每個節點的previousSiblingnextSibling屬性,可以訪問同一列表中的其他節點列表中第一個節點的previousSibling屬性值為null,而列表中最后一個節點的nextSlbling屬性的值同樣也是null

父節點的firstChildlastChild屬性分別指向起childNodes列表中的第一個和最后一個節點。其中someNode.firstChild等于someNode.childNodes[0],而someNode.lastChild等于someNode.childNodes[someNode.childNodes.length - 1]

hasChildNodes()在節點包含一個或多個子節點的情況下返回true

所有節點都有的最后一個屬性是ownerDocument,該屬性指向表示整個文檔的文檔節點,通過這個屬性,我們可以不必在節點層次中層層回溯到頂端,而是可以直接訪問文檔節點

3、操作關系

appendChild(),用于向childNodes列表的末尾添加一個節點,相應的指針關系會更新,更新完成后返回一個新增的節點。

1         var returnNode = someNode.appendChild(newNode);2         console.log(returnNode = someNode.firstChild); //true3         console.log(returnNode = newNode);    //true

如果傳入到appendChild()方法中的參數已經是文檔中的一部分,則他會從原來的位置轉移到新的位置,例如

1         var returnNode = someNode.appendChild(someNode.firstChild);2         console.log(returnNode = sonmeNode.firstChild); //false3         console.log(returnNode = someNode.lastChild); //true

insertBefore()把節點放在列表中某個特定的位置上。接受兩個參數:插入的節點和作為參考的節點。插入的節點會作為參考節點的前一個同胞節點,同時被返回,如果參照節點是null,則和appendChild()相同

DOM-Node類型

1         //插入后成為第一個節點2          returnNode = someNode.insertBefore(newNode,someNode.childNodes[0]);3          //插入后成為最后一個節點4          returnNode = someNode.insertBefore(newNode,someNode.lastChild);5          //插入到最后一個節點的前面6          returnNode = someNode.insertBefore(newNode,someNode.childNodes[someNode.childNodes.length - 1]);

DOM-Node類型

replaceChild()替換某個節點,接受兩個參數:插入的節點和要替換的節點。要替換的節點將由這個方法返回并從文檔樹中移除。

1          //替換第一個子節點2          var returnNode = replaceChild(newNode,someNode.firstChild);

removeChild()移除某個節點,接受一個參數即要移除的節點并返回它。

1          //移除第一個子節點2          var returnNode = removeChild(someNode.childNodes[0]);

4、其他方法

有兩個方法是所有類型的節點都有的:cloneNode()和normalize()

cloneNode()方法接受一個布爾值參數,表示是否執行深復制,參數為true時,執行深復制。也就是復制節點本身和整個子節點樹。參數為false時,執行淺復制即只復制節點本身。復制后返回的節點副本屬于文檔所有,但并沒有為他指定父節點。因此,這個節點的副本就成為了一個“孤兒”,除非通過appendChild()、insertBefore()或replaceChild()將他添加到文檔中,例如:

DOM-Node類型

 1          <ul> 2              <li></li> 3              <li></li> 4              <li></li> 5          </ul> 6  7          //如果我們已經將<ul>元素的引用保存在了myList中, 8  9          var deepList = myList.cloneNode(true);10          console.log(deepList.childNodes.length); //311 12          var shallowList = myList.cloneNode(false);13          concole.log(shallow.childNodes.length); //0

DOM-Node類型

cloneNode()方法不會復制添加到DOM節點中的JavaScript屬性,例如事件處理程序等。

normalize()唯一的作用就是處理文檔中的文本節點,由于解析器的實現或者DOM操作等原因,可能會出現文本節點不包含文本,或者接連出現兩個文本節點的情況。當在某個節點上調用這個方法時,就會在該節點中查照上述兩種情況。如果找到了空文本節點,則刪除它。如果找到相鄰的文本節點,則將它們合并為一個文本節點。

 


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

闸北区| 龙里县| 苏尼特右旗| 五华县| 扎囊县| 宜黄县| 宝坻区| 临朐县| 大余县| 南岸区| 五常市| 宁都县| 丹凤县| 东乡| 枣庄市| 八宿县| 陵川县| 友谊县| 广昌县| 博爱县| 平舆县| 湖南省| 武夷山市| 临湘市| 瑞昌市| 松原市| 开原市| 高尔夫| 类乌齐县| 灵山县| 方正县| 吴堡县| 双牌县| 保亭| 江达县| 封丘县| 青河县| 宜城市| 隆尧县| 中牟县| 丹巴县|