1、創(chuàng)建節(jié)點(diǎn)createElement()、setAttribute()、createTextNode()
創(chuàng)建元素節(jié)點(diǎn):
語法: document.createElement("標(biāo)簽名稱")
創(chuàng)建屬性節(jié)點(diǎn)或更改屬性節(jié)點(diǎn)的值:
語法:元素節(jié)點(diǎn).setAttribute("屬性名",‘屬性值 )
創(chuàng)建文本節(jié)點(diǎn):
語法:document.createTextNode("文本內(nèi)容")
以上三種創(chuàng)建的節(jié)點(diǎn)都存在內(nèi)存中,我們還要通過appendChild()或insertBefore()把它插到頁
面中去。
eg:var odiv=document.createElement("div");//創(chuàng)建一個(gè)div
document.body.appendChild(odiv);//把創(chuàng)建好的div放到頁面中
odiv.setAttribute("class","tag");//給div添加名為tag的類名
odiv.setAttribute("class","div1");//給div的類名改成div1
var otext= document.createTextNode("我是一個(gè)div");//創(chuàng)建一個(gè)文本節(jié)點(diǎn)。
odiv.appendChild(otext);//給div添加文本節(jié)點(diǎn)
2、 插入節(jié)點(diǎn):appendChild()和insertBefore() 此兩種方法都是父級調(diào)用
語法:父節(jié)點(diǎn).appendChild("新節(jié)點(diǎn)")
作用:把新節(jié)點(diǎn)添加到父節(jié)點(diǎn)里,放到最后。
語法:老節(jié)的父節(jié)點(diǎn).insertBefore("新節(jié)點(diǎn)","老節(jié)點(diǎn)");
作用:把新節(jié)點(diǎn)插到老節(jié)點(diǎn)的前面。
3、替換節(jié)點(diǎn):replaceChild()此方法由父級調(diào)用
語法:老節(jié)點(diǎn)的父節(jié)點(diǎn).replaceChild("新節(jié)點(diǎn)",“老節(jié)點(diǎn)”)
作用:用新節(jié)點(diǎn)替換老節(jié)點(diǎn)。
4、刪除節(jié)點(diǎn):removeChild()也是由父節(jié)點(diǎn)調(diào)用
語法:父節(jié)點(diǎn).removeChild(子 節(jié)點(diǎn))
作用:把子節(jié)點(diǎn)從父節(jié)點(diǎn)中刪除,返回刪除的節(jié)點(diǎn)
5、克隆節(jié)點(diǎn):cloneChild()
語法:節(jié)點(diǎn).cloneChild(true/false)
參數(shù):默認(rèn)為false,只復(fù)制當(dāng)前節(jié)點(diǎn),為true時(shí)它的所有子節(jié)點(diǎn)也一起復(fù)制。
它也是存在內(nèi)存中,也需要向頁面里添加。
6、判斷節(jié)點(diǎn):hasChildNode()
語法:節(jié)點(diǎn).hasChildNode()
作用:判斷節(jié)點(diǎn)是否包含子節(jié)點(diǎn),包含返回true,不包含返回false.
js操作dom是一個(gè)很耗性能的過程,在某些情況下,不得不進(jìn)行dom循環(huán)操作,我們每次對dom的操作都會觸發(fā)"重排",這嚴(yán)重影響到能耗,一般通常采取的做法是盡可能的減少dom操作來減少"重排"。
面對循環(huán)操作dom的過程,我們選擇使用文檔碎片(creatDocumentFragment),將需要添加到dom中的內(nèi)容都添加到文檔碎片中,然后一次性的將文檔碎片添加到dom樹,這樣就可以有效的減少操作dom的次數(shù),減少重排的發(fā)生。