多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > web前端 > jscript > NodeList集合跟Array數組的區別

NodeList集合跟Array數組的區別

來源:程序員人生   發布時間:2014-03-13 14:17:50 閱讀次數:2653次
首先來看看什么是NodeList,NodeList跟arguments都不是普通的數組,他們有數組的一些基本屬性但是又不完全是數組。下面是在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等)取出來的集合,是集合而不是普通的數組,但是他們有數組的一些屬性,例如length、下標索引,但是他們也有自己的屬性,例如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也會發生相應的變化:

//把第一個li插入的ul的底部
myUl.appendChild(myUl.getElementsByTagName('li').item(0));
console.log(lis[0]);//輸出的是原來ul的第二個li
所以我們應該在寫代碼的時候注意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內,已經存在的a元素后再附加一個a元素。但是,您可以運行一下,瀏覽器crash掉了吧?樓豬這里IE直接掛掉,FF提示腳本正忙,是否停止腳本運行,點擊停止后,頁面內已經生成了n多個a鏈接。這是因為NodeList的length會不斷變化上升,循環循環再循環,最后成了個死循環。

NodeList轉化為數組
NodeList具有length,下標索引這些數組的屬性特征,但是我們不可以使用數組的push、pop、shift、unshift等數組原生的方法,這樣我們就不能使用數組的原生方法來操作NodeList,所以我們要吧NodeList轉化為數組,方便操作。下面的代碼就可以把NodeList轉化為普通的數組。

function collectionToArray(collection){
var ary = [];
for(var i=0, len = collection.length; i < len; i++){
ary.push(collection[i]);
}
return ary;
}
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 手机看片精品国产福利盒子 | 在线观看视频播放 | 一本大道香蕉久在线不卡视频 | 国产精品第1页在线观看 | 性欧美高清video | 国产小网站 | 国产免费a v吧在线观看不卡 | 色综合久久综合欧美综合网 | 韩国午夜理伦三级2020豆豌 | 国产伊人影院 | 中文字幕第八页 | 国产一级淫片a免费播放口 国产一级淫片a免费播放口欧美 | 久久久一区二区三区 | 国产未成女年一区二区 | 国产在线啪 | 级毛片久久久毛片精品毛片 | 亚洲另类图片小说 | 日韩欧美久久一区二区 | 欧美激情一级欧美精品 | 久久精品国产精品亚洲毛片 | 中国xxxx做受欧美1314 | 免费观看中文字幕 | 91久久亚洲精品国产一区二区 | 国产精品久久免费 | 亚洲成人网页 | 欧美福利在线播放 | 久久www免费人成精品 | 中文字幕亚洲综合久久202 | 国产一区二区在线视频观看 | 另类专区亚洲 | 亚洲精品456在线播放 | 国产午夜亚洲精品久久www | 亚洲二区在线视频 | 亚洲视频在线免费观看 | 国产高清精品91在线 | 亚洲三级黄色 | 欧美成人午夜片一一在线观看 | 性欧美18videofreetubehd黑人 | 久久乐国产综合亚洲精品 | 免费欧美一级 | 免费欧洲毛片a级视频无风险 |