DOM(四)

第十天

03-對象模型-第04天{創建結構}

節點操作

克隆節點 - cloneNode()

  • element.cloneNode(): 復制element節點

  • 參數:布爾值,

    • true代表深層克隆,把當前節點和內部所有節點都復制一份

    • false代表淺層克隆,只復制當前節點

      <div id="father">
          <div id="son"><div/>
      </div>
      
      var father = document.getElementById("father");
      var son = document.getElementById("son");
      var clone = son.cloneNode(true);// 把son這個div復制一份 復制出來的clone和son沒有任何關系了
      
      

添加節點 - appendChild()

  • father.appendChild(son):將son節點追加到father內部的最后位置

    <div id="father">
        <div id="son"><div/>
    </div>
    <div id="demo"></div>
    
    var father = document.getElementById("father");
    var demo = document.getElementById("demo");
    var clone = demo.cloneNode(true);// 將demo克隆一份 
    father.appendChild(clone);// 將克隆出來的clone追加到father中
    
    // 此時頁面結構應該為
    <div id="father">
        <div id="son"><div/>
        <div id="demo"></div>
    </div>
    <div id="demo"></div>
    
    #追加克隆節點對原節點不會產生影響
    
    //如果代碼如下 則會將demo節點直接移動到father節點下
    father.appendChild(demo);// demo是頁面上存在的節點
    
    // 此時頁面結構應該為
    <div id="father">
        <div id="son"><div/>
        <div id="demo"></div>
    </div>
    
    

插入節點 - insertBefore()

  • father.inserBefore(son1,son2): 將son1插入到father節點下的son2前面

    <div id="father">
        <div id="son"><div/>
    </div>
    <div id="demo"></div>
    
    var father = document.getElementById("father");
    var son = document.getElementById("son");
    var demo = document.getElementById("demo");
    
    father.inserBefore(son,demo);//會直接將demo節點移動到father下的son前面       
    
    #插入克隆出來的節點也不會對原節點產生影響
    
    

移除節點 - removeChild()

  • father.removeChild(son): 將father下的son節點移除

    <div id="father">
        <div id="son"><div/>
    </div>
    
    var father = document.getElementById("father");
    var son = document.getElementById("son");
    
    father.removeChild(son);// 直接將son節點刪除
    
    

獲取節點

獲取第一個子節點 - firstChild

<div id="father">
        <div id="son1"><div/>
        <div id="son2"><div/>
        <div id="son3"><div/>
</div>

var father = document.getElementById("father");
var first = father.firstChild;// 獲取到的是文本節點 換行

獲取第一個子元素 - firstElementChild

<div id="father">
        <div id="son1"><div/>
        <div id="son2"><div/>
        <div id="son3"><div/>
</div>

var father = document.getElementById("father");
var first = father.firstElementChild;// 獲取到的是son1

獲取第一個子元素兼容寫法

// 獲取element的第一個子元素
function getFirstElement(element){
    // 判斷是否支持這一寫法
    if(element.firstElementChild){
        return element.firstElementChild;
    }else{
        // 先找到第一個節點
        var first = element.firstChild;
        // 如果這個節點存在而且這個節點不是元素節點
        while(first&&first.nodeType !== 1){
            // 從這個節點向后繼續找下一個兄弟節點
            first = first.nextSibling;
        }
        return first;
    }
}

獲取最后一個子元素兼容寫法

// 獲取element的最后一個子元素
function getLastElement(element){
    // 判斷是否支持這一寫法
    if(element.lastElementChild){
        return element.lastElementChild;
    }else{
        // 先找到最后一個個節點
        var last = element.lastChild;
        // 如果這個節點存在而且這個節點不是元素節點
        while(last&&last.nodeType !== 1){
            // 從這個節點向前繼續找上一個兄弟節點
            last = last.previousSibling;
        }
        return last;
    }
}

創建結構

document.write()

  • 特點:只能被document調用,而且會覆蓋頁面上原有內容

    document.write("<a )
    
    // 可以在頁面上創建一個a標簽,而且會覆蓋頁面上原有的所有內容
    
    

innerHtml()

  • 特點:往頁面添加html標簽,可以限定范圍

    <div id="box"></div>
    
    var box = document.getElementById("box");
    box.innerHtml = "<a ;
    
    // 追加后的結構為
    <div id="box">
        <a >百度</a>
    </div>
    
    

createElement()

  • 特點:動態創建標簽,添加到頁面需要配合appendChild使用

    <div id="box"></div>
    
    var box = document.getElementById("box");
    var input = document.createElement("input");
    input.type = "text";
    box.appendChild(input);
    
    

性能問題

    <div id="box"></div>

    var box = document.getElementById("box");
    for(var i=0;i<1000;i++){
        box.innerHtml += "<a ;
    }

    // 1.大量拼接字符串
    // 2.字符串轉換為文檔對象
    // 3.把對象掛接到DOM樹上
    // 4.渲染引擎根據新的DOM樹重新渲染

優化

### 數組拼接
    var arr = [];
    for(var i=0;i<1000;i++){
        arr.push("<a );
    }
    box.innerHtml = arr.join("");

### createElement
    for(var i=0;i<1000;i++){
        var a = document.createElement("a");
        box.apendChild(a);
        a.;
        a.innerHtml = "百度";
    }

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

推薦閱讀更多精彩內容

  • DOM筆記獲取元素獲取指定元素獲取子元素&兄弟元素&父元素獲取第一&最后一個子元素節點操作克隆節點 - clone...
    believedream閱讀 449評論 0 2
  • DOM DOM內容主要分為四部分: 什么是DOM和節點; 獲取節點; 節點操作(3種); 屬性操作(3種)。 什么...
    magic_pill閱讀 795評論 0 1
  • 1. 什么是DOM 文檔對象模型 (DOM) 是HTML和XML文檔的編程接口。它提供了對文檔的結構化的表述,并定...
    hanyuntao閱讀 1,298評論 0 4
  • 本章內容 理解包含不同層次節點的 DOM 使用不同的節點類型 克服瀏覽器兼容性問題及各種陷阱 DOM 是針對 HT...
    悶油瓶小張閱讀 669評論 0 1
  • 每次上完課程,總是會有一段長久的沉默。我會花更多時間去深入和梳理,補充和沉淀, 這其中包括疑惑、混亂和困頓,也包...
    小步舞曲牛寶春閱讀 378評論 0 0