【JavaScript】JS的NodeList对象

NodeList与HTML Collection

getElementsByClassName()和getElementsByTagName()都返回NodeList对象,

而类似document.images和document.forms的属性为HTML Collection对象。

NodeList和HTML Collection对象不是历史文档状态的一个静态快照,而通常是实时的。

也许你会问,通过这种方式获取的这一组dom元素不就是一个数组吗?

有length属性,可以索引取值,一定是数组吗?

好像arguments也是这样吧,但它真的不是数组(Array)。

如何验证NodeList不是数组?

最直接的方法就是试一下Array专有的push和pop大法。无一例外会提示没有push或者pop方法。

类数组有arguments、NodeList、HTML Collection。

类数组对象的陷阱:for-in

原理是这样的,for-in遍历的是元素的所有属性,包括原型链中的属性,所以会打印出keys,entries这种原型链的属性。

可以用hasOwnProperty()方法来填平for-in的坑,因为这个方法是用于判断当前属性是否是对象的自有属性。

如何将类数组对象转换为普通对象?

  1. for循环复制到新的对象中
  2. 使用Array.prototype.slice方法

getElementsByClassName()什么时候加[0] ?

ID名查找元素,DOM规定ID名在页面和在元素那里只能一个,所以查找ID不需要加[0]。

而标签和类型则不同,DOM规定它们可以是多个,所以标签和类名获取要加[0]来获取它们是第几个。

为何只有一个类时,getElementsByClassName()也需要加[0]才能工作?

document.getElementsByClassName()将返回具有给定类名的元素列表。

即使只有一个元素具有这个类名,它也将出现在节点列表中,这就是为什么必须使用[0]。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值