1. 程式人生 > >114_js筆記16_節點元素的dom操作 + HTMLCollection + NodeList

114_js筆記16_節點元素的dom操作 + HTMLCollection + NodeList

  • 一,建立新的 HTML 元素 (節點) - appendChild()

    • //標籤
      <div id="div1">
          <p id="p1">這是一個段落。</p>
          <p id="p2">這是另外一個段落。</p>
      </div>
      
      //dom操作
              //為 <p> 元素新增文字節點:
              var para = document.createElement("p");
              //將文字節點新增到 <p> 元素中:
              var node = document.createTextNode("這是一個新的段落1。");
              //最後,在一個已存在的元素中新增 p 元素。
              para.appendChild(node);
              //最後,在一個已存在的元素中新增 p 元素。查詢已存在的元素:
              var element = document.getElementById("div1");
              //最後,在一個已存在的元素中新增 p 元素。新增到已存在的元素中:
              element.appendChild(para);

       

  • 二,建立新的 HTML 元素 (節點) - insertBefore()

    • var para1 = document.createElement("p");
              var node1 = document.createTextNode("這是一個新的段落2。");
              para1.appendChild(node1);
              var element1 = document.getElementById("div1");
              var child1 = document.getElementById("p1");
              element1.insertBefore(para1, child1);   

       

  • 三,移除已存在的元素(節點) - removeChild()

    • //查詢 id="div1" 的元素:
              var parent = document.getElementById("div1");
              //查詢 id="p1" 的 <p> 元素:
              var child = document.getElementById("p1");
              //從父元素中移除子節點:
              parent.removeChild(child);

       

  • 四,替換 HTML 元素(節點) - replaceChild()

    •  var para2 = document.createElement("p");
              var node2 = document.createTextNode("這是一個新的段落3。");
              para2.appendChild(node2);
              
              var parent2 = document.getElementById("div1");
              var child2 = document.getElementById("p2");
              parent.replaceChild(para2, child2);

       

  • 五,HTMLCollection 物件

    • 1,getElementsByTagName() 方法返回 HTMLCollection 物件。
      • var myCollection = document.getElementsByTagName("p");
    • 2,集合中的元素可以通過索引(以 0 為起始位置)來訪問。
      • myCollection[1]
    • 3,HTMLCollection 物件的 length 屬性定義了集合中元素的數量
      • myCollection.length
    • 4,遍歷元素個數
      • var myCollection = document.getElementsByTagName("p");
        var i;
        for (i = 0; i < myCollection.length; i++) {
            myCollection[i].style.backgroundColor = "red";
        }

         

    • 5,注意:
      • HTMLCollection 不是一個數組!
      • 可以像陣列一樣,使用索引來獲取元素
  • 六,NodeList物件

    • 1,所有瀏覽器的  childNodes 屬性返回的是 NodeList 物件
      • var myNodeList = document.childNodes;
    • 2,大部分瀏覽器的 querySelectorAll() 返回 NodeList 物件
      • var myNodeList = document.querySelectorAll("p");
    • 3,一些舊版本瀏覽器中的方法(如:getElementsByClassName())返回的是 NodeList 物件,而不是 HTMLCollection 物件
    • 4,NodeList 中的元素可以通過索引(以 0 為起始位置)來訪問
      • y = myNodeList[1]
    • 5,NodeList 物件 length 屬性定義了節點列表中元素的數量
      • myNodelist.length
    • 6,遍歷元素
      • var myNodelist = document.querySelectorAll("p");
        var i;
        for (i = 0; i < myNodelist.length; i++) {
            myNodelist[i].style.backgroundColor = "red";
        }

         

  • 七,HTMLCollection 與 NodeList 的區別

    • 相同點:
      • NodeList 與 HTMLCollection 有很多類似的地方。 
      • NodeList 與 HTMLCollection 都與陣列物件有點類似,可以使用索引 (0, 1, 2, 3, 4, ...) 來獲取元素。
      • NodeList 與 HTMLCollection 都有 length 屬性。
      • HTMLCollection 元素可以通過 name,id 或索引來獲取
      • 無法使用陣列的方法: valueOf(), pop(), push(), 或 join()
    • 不同點:
      • HTMLCollection 是 HTML 元素的集合;NodeList 是一個文件節點的集合。
      • NodeList 只能通過索引來獲取;HTMLCollection 元素可以通過 name,id 或索引來獲取
      • 只有 NodeList 物件有包含屬性節點和文字節點

 

 

    •