JS的DOM中添加、移動、復(fù)制、刪除、替換、查找節(jié)點的方法?
創(chuàng)建元素
document.createElement('tagName');
添加元素
parent.appendChild(childNode);
注:父元素調(diào)用該方法。
移動元素
由于DOM對象屬于引用類型,所以在操作appendChild和insertBefore方法時, 控制的節(jié)點如果是文檔中存在的節(jié)點,那么將把這個節(jié)點移到目標(biāo)處。
復(fù)制節(jié)點
oLi.cloneNode(true);
注:參數(shù)true表示深度克?。ㄉ羁截悾琭alse 表示淺度克?。\拷貝),深拷貝也就是復(fù)制節(jié)點及整個節(jié)點數(shù);淺拷貝復(fù)制節(jié)點本身。復(fù)制后返回的節(jié)點副本屬于文檔所有,但并沒有為它指定父節(jié)點。因此,整個節(jié)點副本就成為一個‘孤兒’:
<ul id='oUl'>
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
<script>
var myList = document.getElementById("oUl");
var deepList = myList.cloneNode(true);
console.log(deepList.childNodes.length);//3 (IE<9) 或7 (其它瀏覽器)
var shallowList = myList.cloneNode(false);
console.log(shallowList.childNodes.length);//0
</script>
cloneNode()方法不會復(fù)制添加DOM節(jié)點的JS屬性,例如事件處理程序等。這個方法只復(fù)制特性,其他一切都不會復(fù)制。
刪除節(jié)點
parentNode.removeChild(childNode);
注:父元素調(diào)用該方法,返回值為被刪除的節(jié)點。
替換元素
parentNode.replaceChild(newNode,oldNode);
注:oldNode節(jié)點必須是parentNode的子節(jié)點。
插入元素
parentNode.insertBefore(newEle, oldNode);
注:父元素調(diào)用該方法。
查找節(jié)點的總結(jié)
- childNodes—返回節(jié)點到子節(jié)點的節(jié)點列表firstChild— 返 回 節(jié) 點 的 首 個 子 節(jié) 點 ; lastChild—返回節(jié)點的最后一個子節(jié)點; nextSibling—返回節(jié)點之后緊跟的同級節(jié)點; nodeName—返回節(jié)點的名字,根據(jù)其類型; nodeType—返回節(jié)點的類型。
- nodeValue—設(shè)置或返回節(jié)點的值,根據(jù)其類型; ownerDocument—返回節(jié)點的根元素(document對象); parentNode—返回節(jié)點的父節(jié)點。
- previousSibling—返回節(jié)點之前緊跟的同級節(jié)點。
- text—返回節(jié)點及其后代的文本(IE獨有); xml—返回節(jié)點及其后代的XML(IE獨有); 節(jié)點對象的方法。
- appendChild()—向節(jié)點的子節(jié)點列表的結(jié)尾添加新的子節(jié)點; cloneNode()—復(fù)制節(jié)點。
- hasChildNodes()—判斷當(dāng)前節(jié)點是否擁有子節(jié)點; insertBefore()—在指定的子節(jié)點前插入新的子節(jié)點; normalize()—合并相鄰的Text節(jié)點并刪除空的Text節(jié)點; removeChild()—刪除(并返回)當(dāng)前節(jié)點的指定子節(jié)點; replaceChild()—用新節(jié)點替換一個子節(jié)點。
IE6獨有方法
- selectNodes()—用一個XPath表達式查詢選擇節(jié)點; selectSingleNode()—查找和XPath查詢匹配的一個節(jié)點。
- transformNode()—使用XSLT把一個節(jié)點轉(zhuǎn)換為一個字符串。transformNodeToObject()—使用XSLT把一 個節(jié)點轉(zhuǎn)換成為一個文檔。
經(jīng)典的問題解析。
創(chuàng)建新節(jié)點
createDocumentFragment() //創(chuàng)建一個DOM片段createElement() //創(chuàng)建一個具體的元素createTextNode() //創(chuàng)建一個文本節(jié)點。
添加、移除、替換、插入
appendChild()
removeChild()
replaceChild()
insertBefore() //在已有的子節(jié)點前插入一個新的子節(jié)點查找
getElementsByTagName() //通過標(biāo)簽名稱
getElementsByName() //通過元素的Name屬性的值(IE容錯能力較強,會得到一個數(shù)組,其中包括id等于name值的)
getElementById() //通過元素Id,唯一性