DOM(四)

第十天

03-對象模型-第04天{創(chuàng)建結(jié)構(gòu)}

節(jié)點操作

克隆節(jié)點 - cloneNode()

  • element.cloneNode(): 復(fù)制element節(jié)點

  • 參數(shù):布爾值,

    • true代表深層克隆,把當(dāng)前節(jié)點和內(nèi)部所有節(jié)點都復(fù)制一份

    • false代表淺層克隆,只復(fù)制當(dāng)前節(jié)點

      <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復(fù)制一份 復(fù)制出來的clone和son沒有任何關(guān)系了
      
      

添加節(jié)點 - appendChild()

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

    <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中
    
    // 此時頁面結(jié)構(gòu)應(yīng)該為
    <div id="father">
        <div id="son"><div/>
        <div id="demo"></div>
    </div>
    <div id="demo"></div>
    
    #追加克隆節(jié)點對原節(jié)點不會產(chǎn)生影響
    
    //如果代碼如下 則會將demo節(jié)點直接移動到father節(jié)點下
    father.appendChild(demo);// demo是頁面上存在的節(jié)點
    
    // 此時頁面結(jié)構(gòu)應(yīng)該為
    <div id="father">
        <div id="son"><div/>
        <div id="demo"></div>
    </div>
    
    

插入節(jié)點 - insertBefore()

  • father.inserBefore(son1,son2): 將son1插入到father節(jié)點下的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節(jié)點移動到father下的son前面       
    
    #插入克隆出來的節(jié)點也不會對原節(jié)點產(chǎn)生影響
    
    

移除節(jié)點 - removeChild()

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

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

獲取節(jié)點

獲取第一個子節(jié)點 - 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;// 獲取到的是文本節(jié)點 換行

獲取第一個子元素 - 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{
        // 先找到第一個節(jié)點
        var first = element.firstChild;
        // 如果這個節(jié)點存在而且這個節(jié)點不是元素節(jié)點
        while(first&&first.nodeType !== 1){
            // 從這個節(jié)點向后繼續(xù)找下一個兄弟節(jié)點
            first = first.nextSibling;
        }
        return first;
    }
}

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

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

創(chuàng)建結(jié)構(gòu)

document.write()

  • 特點:只能被document調(diào)用,而且會覆蓋頁面上原有內(nèi)容

    document.write("<a )
    
    // 可以在頁面上創(chuàng)建一個a標(biāo)簽,而且會覆蓋頁面上原有的所有內(nèi)容
    
    

innerHtml()

  • 特點:往頁面添加html標(biāo)簽,可以限定范圍

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

createElement()

  • 特點:動態(tài)創(chuàng)建標(biāo)簽,添加到頁面需要配合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.字符串轉(zhuǎn)換為文檔對象
    // 3.把對象掛接到DOM樹上
    // 4.渲染引擎根據(jù)新的DOM樹重新渲染

優(yōu)化

### 數(shù)組拼接
    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 = "百度";
    }

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末榛了,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子煞抬,更是在濱河造成了極大的恐慌霜大,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件革答,死亡現(xiàn)場離奇詭異战坤,居然都是意外死亡,警方通過查閱死者的電腦和手機残拐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門途茫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人溪食,你說我怎么就攤上這事囊卜。” “怎么了错沃?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵栅组,是天一觀的道長。 經(jīng)常有香客問我枢析,道長玉掸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任登疗,我火速辦了婚禮排截,結(jié)果婚禮上嫌蚤,老公的妹妹穿的比我還像新娘。我一直安慰自己断傲,他們只是感情好脱吱,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著认罩,像睡著了一般箱蝠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上垦垂,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天宦搬,我揣著相機與錄音,去河邊找鬼劫拗。 笑死间校,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的页慷。 我是一名探鬼主播憔足,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼酒繁!你這毒婦竟也來了滓彰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤州袒,失蹤者是張志新(化名)和其女友劉穎揭绑,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體郎哭,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡他匪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了彰居。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诚纸。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖陈惰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情毕籽,我是刑警寧澤抬闯,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站关筒,受9級特大地震影響溶握,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蒸播,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一睡榆、第九天 我趴在偏房一處隱蔽的房頂上張望萍肆。 院中可真熱鬧,春花似錦胀屿、人聲如沸塘揣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亲铡。三九已至,卻和暖如春葡兑,著一層夾襖步出監(jiān)牢的瞬間奖蔓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工讹堤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留吆鹤,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓洲守,卻偏偏與公主長得像疑务,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子岖沛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容

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