獲取DOM節點的幾種方式


DOM 是一個樹形結構,操作一個DOM節點,實際上就是這幾個操作:更新、刪除、添加、遍歷

在操作DOM節點之前,需要通過各種方式先拿到這個DOM節點,常用的方法有:

一、通過元素類型的方法來操作:

  1. document.getElementById();//id名,在實際開發中較少使用,選擇器中多用class  id一般只用在頂級層存在 不能太過依賴id
  2. document.getElementsByTagName();//標簽名
  3. document.getElementsByClassName();//類名
  4. document.getElementsByName();//name屬性值,一般不用
  5. document.querySelector();//css選擇符模式,返回與該模式匹配的第一個元素,結果為一個元素;如果沒找到匹配的元素,則返回null
  6. document.querySelectorAll()//css選擇符模式,返回與該模式匹配的所有元素,結果為一個類數組

注意:

  • 前綴為document,意思是在document節點下調用這些方法,當然也可以在其他的元素節點下調用,如:

<div id="myDiv">
            <p>html</p>
            <p>css</p>
            <p>javascript</p>
</div>
<p>jquery</p>

    <script>
        var div=document.getElementById("myDiv");
        var p1=div.getElementsByTagName("p");//在div下調用
        alert(p1.length);//3  div節點下的p元素只有三個
        var p2 = document.getElementsByTagName("p");
        alert(p2.length);//4  document節點下的p元素有四個

    </script>
  • querySelector()和querySelectorAll()方法,最后兩個為靜態的,不是實時的,保存的是當時的狀態,是一個副本,即:在以后的代碼中通過方法使所選元素發生了變化,但該值依然不會改變,因此使用有局限性,一般不用,除非就想得到副本

舉例如下:

        <div id="myDiv">
            <p>html</p>
            <p>css</p>
            <p>javascript</p>
        </div>
        <p>jquery</p>

    <script>
        var div=document.getElementById("myDiv");
        var p1=div.getElementsByTagName("p");
        alert(p1.length);//3
        var p2 = document.getElementsByTagName("p");
        alert(p2.length);//4
        var p3=document.querySelectorAll("p");
        alert(p3.length);//4
        document.body.appendChild(document.createElement("p"));//創建新元素P,並添加到body中
        alert(p1.length);//3   div節點下的p元素依然只有三個
        alert(p2.length);//5   在body中添加了一個新的P元素,該方法是“動態的”,因此,長度發生了變化
        alert(p3.length);//4   該方法是“靜態的”,因此,無論發生什么變化,p3的值依然不會發生改變

二、根據關系樹來選擇(遍歷節點樹):

先簡單介紹一下節點:

DOM(文檔對象模型)可以將任何HTML、XML文檔描繪成一個多層次的節點樹。所有的頁面都表現為以一個特定節點為根節點的樹形結構。html文檔中根節點為document節點。

所有節點都有nodeType屬性,代表節點的不同類型,通過nodeType屬性可以來判斷節點的類型。經常使用的節點主要有以下幾種類型:

  1. Element類型(元素節點):nodeType值為 1
  2. Text類型(文本節點):nodeType值為 3
  3. Comment類型(注釋節點):nodeType值為 8
  4. Document類型(document節點):nodeType值為 9;其規定的一些常用的屬性有

    document.body    document.head  分別為HTML中的 <body><head>

    document.documentElement為<html>標簽

所有的節點都有   hasChildNodes()方法    判斷有無子節點  有一個或多個子節點時返回true

通過一些屬性可以來遍歷節點樹:

  1. parentNode//獲取所選節點的父節點,最頂層的節點為#document
  2. childNodes //獲取所選節點的子節點們 
  3. firstChild //獲取所選節點的第一個子節點
  4. lastChild //獲取所選節點的最后一個子節點
  5. nextSibling //獲取所選節點的后一個兄弟節點  列表中最后一個節點的nextSibling屬性值為null
  6. previousSibling //獲取所選節點的前一兄弟節點   列表中第一個節點的previousSibling屬性值為null
        <div id="myDiv">
            <p>html</p>
            <p>css</p>
            <p>javascript</p>
        </div>
        <p>jquery</p>

    <script>
        var div = document.getElementById("myDiv");
        alert(div.childNodes.length);//7

在上邊的例子中可以看出,div元素節點的所有子節點一共有7個,在后台查看可以得知:div元素節點的所有子節點包括  4個文本節點(在此全為空文本)和三個元素節

        <div id="myDiv">第一個 文本節點<p>html</p>第二個   文本節點<p>css</p>第三個  文本節點<p>javascript</p>第四個
文本節點</div>

由於文檔中的節點類型較多,遍歷子節點的結果很多時候並不能得到我們想要的結果,使用遍歷元素節點則很方便

三、基於元素節點樹的遍歷(遍歷元素節點樹):

  1. parentElement //返回當前元素的父元素節點(IE9以下不兼容)
  2. children  // 返回當前元素的元素子節點
  3. firstElementChild //返回的是第一個元素子節點(IE9以下不兼容)
  4. lastElementChild  //返回的是最后一個元素子節點(IE9以下不兼容)
  5. nextElementSibling  //返回的是后一個兄弟元素節點(IE9以下不兼容)
  6. previousElementSibling  //返回的是前一個兄弟元素節點(IE9以下不兼容)
        <div id="myDiv">
            <p>html</p>
            <p>css</p>
            <p>javascript</p>
        </div>
        <p>jquery</p>

    <script>
        var div = document.getElementById("myDiv");
        alert(div.children.length);//3

遍歷元素節點雖然方便,但是除了children屬性外,其他的屬性則IE9以下不兼容

 注意一點:這些獲取節點的方式,返回值要么是一個特定的節點,要么是一個集合HTMLCollection,這個節點的集合是一個類數組

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM