javascript中的动态集合——NodeList、HTMLCollection、NamedNodeMap

本文详细介绍了Web开发中常用的DOM集合类型NodeList、HTMLCollection和NamedNodeMap,包括它们之间的相同点与不同点,并探讨了如何将这些类数组对象转换为标准数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、NodeListHTMLCollectionNamedNodeMap的相同点与不同点
(1)相同点
1. 三者都是类数组对象
2. 都有item()方法

(2)不同点
1. NodeList是节点(12种)的集合、HTMLCollection是元素节点的集合、NamedNodeMap是属性节点的集合
2. NodeList有静态的、有动态的,HTMLCollectionNamedNodeMap都是动态集合

二、NodeList

NodeList 对象代表一个有序的节点列表.

哪些返回NodeList

  <div id="container">
        <span></span>
    </div>

childNode:返回动态NodeList,基于DOM结构动态执行查询的结果,因此DOM结构的变化能够自动的反应在NodeList对象中。

 var oDiv=document.getElementById("container");
 console.log(oDiv.childNodes.length);//3
 console.log(oDiv.childNodes instanceof NodeList);//true

document(element).querySelectorAll("..."):返回静态NodeList,类似一组元素的快照

 var oDiv1=document.querySelectorAll("#container");
  console.log(oDiv1);//NodeList [div#container]
  console.log(oDiv1 instanceof NodeList);//true

三、HTMLCollection

HTMLCollection 是一个接口,表示 HTML 元素的集合,它提供了可以遍历列表的方法和属性。
哪些返回HTMLCollection呢?

  1. document.getElementsByName
  2. document.getElementsByTagName
  3. document.getElementsByClassName
  4. document.formsdocument.forms[0].elementsdocument.imagesdocument.links

四、NamedNodeMap

NamedNodeMap 对象代表一个节点的无序列表。

哪些返回NamedNodeMap?

element.attributes

var oDiv=document.getElemenById("container");
console.log(oDiv.attributes);//NamedNodeMap {0: id, id: id, length: 1}
console.log(oDiv.attributes instanceof NamedNodeMap);//true

五、将三种类数组对象转化为数组
前面提到:这三种对象都是类数组对象,那么如何将NodeList对象转化为数组呢?

function convertToArray(nodes){
            var array=null;
            try{
                array=Array.prototype.slice.call(nodes,0);//非IE
            }catch(ex){//IE,IE8及更早版本将NodeList对象实现为一个COM对象,不能像JScript对象那样使用这种对象,因此上述代码会发生错误。要想在IE浏览器中将NodeList对象转换为数组,必须手动枚举所有成员
                array=new Array();
                for(var i=0,len=nodes.length;i<len;i++){
                    array.push(nodes[i]);
                }
            }
            return array;
        }

更多关于数组、对象、类数组对象的讨论,请参考:数组、对象、类数组对象的不同以及类数组转数组方法总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值