javascript 變態(tài)的節(jié)點(diǎn)集合
更新時(shí)間:2010年03月28日 14:08:04 作者:
今天想實(shí)現(xiàn)jQuery的unwrap效果,換言之,就是用其孩子把其父節(jié)點(diǎn)干掉。為了效率,用到文檔碎片,而取孩子時(shí)使用到childNodes(返回一個(gè)nodeList)
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
如果預(yù)先將nodeList轉(zhuǎn)換為數(shù)組就沒(méi)有問(wèn)題!
復(fù)制代碼 代碼如下:
window.onload = function(){
var d = document.createDocumentFragment();
var div = document.getElementById("aaa");
var c = div.childNodes;
var arr = [];
for(var i=0,n=c.length;i<n;i++){
arr.push(c[i])
}
for(var i=0,n=arr.length;i<n;i++){
alert(arr[i] + " "+ i)
d.appendChild(arr[i])
}
div.parentNode.replaceChild(d,div)
}
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
很顯然nodeList還一些奇怪的特性是數(shù)組沒(méi)有的。從運(yùn)行框2中,我們可以看到把節(jié)點(diǎn)appendChild到文檔碎片時(shí),其實(shí)會(huì)把它從DOM樹(shù)中剝離出來(lái),nodeList一定是跟蹤這變化,動(dòng)態(tài)改變了它自身,而直線(xiàn)遞加的i是無(wú)法對(duì)應(yīng)正確的節(jié)點(diǎn)的索引!因此我們每次取得它的firstChild就行了。
復(fù)制代碼 代碼如下:
window.onload = function(){
var d = document.createDocumentFragment();
var div = document.getElementById("aaa");
var c = div.childNodes;
while(c.length) d.appendChild(c[0])//每次只取它第一個(gè)節(jié)點(diǎn),直到取空
div.parentNode.replaceChild(d,div)
}
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
順便一提,由getElementsByTagName取得的HTMLCollection也是這個(gè)樣子,因此處理這類(lèi)節(jié)點(diǎn)集合要打起十二分精神了!
[Ctrl+A 全選 注:引入外部Js需再刷新一下頁(yè)面才能執(zhí)行]
這兩種節(jié)點(diǎn)集合在各瀏覽器還實(shí)現(xiàn)得不太一樣,如標(biāo)準(zhǔn)瀏覽器我們可以用Array.prototype.slice.call將它們轉(zhuǎn)換為原生數(shù)組,IE則報(bào)錯(cuò)。標(biāo)準(zhǔn)瀏覽器的它們有hasOwnProperty與valueOf,而IE是沒(méi)有的……
您可能感興趣的文章:
- jQuery:節(jié)點(diǎn)(插入,復(fù)制,替換,刪除)操作
- js獲取Treeview選中的節(jié)點(diǎn)(C#選中CheckBox項(xiàng))
- Javascript的各種節(jié)點(diǎn)操作實(shí)例演示代碼
- javascript學(xué)習(xí)筆記(十九) 節(jié)點(diǎn)的操作實(shí)現(xiàn)代碼
- 初學(xué)js 新節(jié)點(diǎn)的創(chuàng)建 刪除 的步驟
- javascript 節(jié)點(diǎn)排序 2
- javascript 節(jié)點(diǎn)排序?qū)崿F(xiàn)代碼
- javascript中節(jié)點(diǎn)的最近的相關(guān)節(jié)點(diǎn)訪(fǎng)問(wèn)方法
相關(guān)文章
跟我學(xué)習(xí)javascript的隱式強(qiáng)制轉(zhuǎn)換
跟我學(xué)習(xí)javascript的隱式強(qiáng)制轉(zhuǎn)換,感興趣的小伙伴們可以學(xué)習(xí)一下2015-11-11EditPlus 正則表達(dá)式 實(shí)戰(zhàn)(3)
這篇文章主要介紹了EditPlus 正則表達(dá)式 實(shí)戰(zhàn)(3)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12簡(jiǎn)單實(shí)現(xiàn)js點(diǎn)擊展開(kāi)二級(jí)菜單功能
這篇文章主要教大家簡(jiǎn)單實(shí)現(xiàn)js點(diǎn)擊展開(kāi)二級(jí)菜單功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05JavaScript?函數(shù)表達(dá)式與函數(shù)聲明的用法及區(qū)別
這篇文章主要介紹了JavaScript?函數(shù)表達(dá)式與函數(shù)聲明詳析,函數(shù)表達(dá)式和函數(shù)聲明是JavaScript中創(chuàng)建函數(shù)的兩種方法,下面文章具體的相關(guān)內(nèi)容介紹,需要的小伙伴可以參考一下2022-06-06表單提交時(shí)自動(dòng)復(fù)制內(nèi)容到剪貼板的js代碼
表單提交時(shí)自動(dòng)復(fù)制內(nèi)容到剪貼板的js代碼...2007-03-03