日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > web前端 > jscript > NodeList集合跟Array數(shù)組的區(qū)別

NodeList集合跟Array數(shù)組的區(qū)別

來源:程序員人生   發(fā)布時間:2014-03-13 14:17:50 閱讀次數(shù):2660次
首先來看看什么是NodeList,NodeList跟arguments都不是普通的數(shù)組,他們有數(shù)組的一些基本屬性但是又不完全是數(shù)組。下面是在Mozilla上面找到的定義:

This is a commonly used type which is a collection of nodes returned by getElementsByTagName, getElementsByTagNameNS, and Node.childNodes. The list is live, so changes to it internally or externally will cause the items they reference to be updated as well. Unlike NamedNodeMap, NodeList maintains a particular order (document order). The nodes in a NodeList are indexed starting with zero, similarly to JavaScript arrays, but a NodeList is not an array.

由字面意思來看NodeList是DOM操作(getElementsByTagName等)取出來的集合,是集合而不是普通的數(shù)組,但是他們有數(shù)組的一些屬性,例如length、下標(biāo)索引,但是他們也有自己的屬性,例如item,另外NodeList最大的特點就是時效性(live)。

NodeList的時效性
我們來看下面的代碼:

<ul id="nodelist">
<li class="lis">index0</li>
<li class="lis">index1</li>
<li class="lis">index2</li>
<li class="lis">index3</li>
<li class="lis">index4</li>
</ul>
javascript代碼如下:

var myUl = document.getElementById('nodelist');
var lis = myUl.getElementsByTagName('li');
lis是一個NodeList集合,具有時效性,所謂的時效性就是我們在修改li的同時,會反映到lis上來,這與array是不同的,例如我們把第一個li插入到ul的底部,那么lis也會發(fā)生相應(yīng)的變化:

//把第一個li插入的ul的底部
myUl.appendChild(myUl.getElementsByTagName('li').item(0));
console.log(lis[0]);//輸出的是原來ul的第二個li
所以我們應(yīng)該在寫代碼的時候注意NodeList的時效性,不然就會犯一些錯誤,
例如下面的代碼(來自Jeff Wong):

<div id="divAnchor">
<a href="http://www.js8.in">link test</a>
</div>var anchors = document.getElementsByTagName("a");
for (i = 0; i < anchors.length; i++) {
var ele= document.createElement("a");
ele.setAttribute("href", "http://js8.in/");
ele.appendChild(document.createTextNode("new link test"));
document.getElementById("divAnchor").appendChild(ele); //div附加一個新鏈接
}
本意是在div內(nèi),已經(jīng)存在的a元素后再附加一個a元素。但是,您可以運行一下,瀏覽器crash掉了吧?樓豬這里IE直接掛掉,F(xiàn)F提示腳本正忙,是否停止腳本運行,點擊停止后,頁面內(nèi)已經(jīng)生成了n多個a鏈接。這是因為NodeList的length會不斷變化上升,循環(huán)循環(huán)再循環(huán),最后成了個死循環(huán)。

NodeList轉(zhuǎn)化為數(shù)組
NodeList具有l(wèi)ength,下標(biāo)索引這些數(shù)組的屬性特征,但是我們不可以使用數(shù)組的push、pop、shift、unshift等數(shù)組原生的方法,這樣我們就不能使用數(shù)組的原生方法來操作NodeList,所以我們要吧NodeList轉(zhuǎn)化為數(shù)組,方便操作。下面的代碼就可以把NodeList轉(zhuǎn)化為普通的數(shù)組。

function collectionToArray(collection){
var ary = [];
for(var i=0, len = collection.length; i < len; i++){
ary.push(collection[i]);
}
return ary;
}
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 日本国产精品视频 | 天堂中文最新版在线网 | 亚洲综合在线一区 | 欧美偷拍自拍 | 亚洲第一页在线 | 国产精品一区二区三区四区在线观看 | 国内精品一区二区三区 | 丰满少妇高潮惨叫久久久 | 日韩精品1区2区3区 精品视频首页 | 91嫩草影院在线观看 | 性欧美三级| 日本淫片| 欧美日韩在线电影 | 日韩免费观看 | 高清日韩av | 亚洲最大成人av | h国产视频| 国产日韩精品久久 | 国产网站在线免费观看 | 天堂视频在线观看 | 国产精品久久久久久久久久尿 | av片网站 | 国产成人a亚洲精品 | 国产精品久久九九 | 亚洲成人va| 欧美一级二级三级 | 国产小视频在线 | 国产日韩欧美一区 | 日韩欧美国产高清 | 一区二区三区在线视频播放 | 日韩免费一区二区三区 | 一级黄色免费网站 | 亚洲视频在线观看一区 | 久久精品aaaaaa毛片 | 一个人看的www日本高清视频 | 亚洲毛片在线观看 | 欧美激情欧美激情在线五月 | 美国黄色毛片女人性生活片 | 爱情岛论坛首页免费 | 久久久久免费精品 | 51ⅴ精品国产91久久久久久 |