querySelectorAll和getElementsByTagName获取元素的区别

querySelectorAll和getElementsByTagName获取元素的区别

1、document.querySelectorAll()

根据选择器获取所有匹配到的元素

返回的是NodeListNodeList 不是一个数组,是一个类似数组的对象(Like Array Object)。虽然 NodeList 不是一个数组,但是可以使用 forEach() 来迭代。它有length属性

2、document.getElementsByTagName()

根据标签名获取所有匹配到的元素

返回的是一个HTMLCollectionHTMLCollection不是一个数组,是一个类似数组的对象(Like Array Object),它有length属性,不可以forEach()来迭代

为什么 NodeList 不是数组?

摘自MDN:https://developer.mozilla.org/zh-CN/docs/Web/API/NodeList

NodeList 对象在某些方面和数组非常相似,看上去可以直接使用从 Array.prototype 上继承的方法。然而,除了 forEach 方法,NodeList 没有这些类似数组的方法。

JavaScript 的继承机制是基于原型的。数组元素之所以有一些数组方法(比如 forEachmap),是因为它的原型链上有这些方法,如下:

myArray --> Array.prototype --> Object.prototype --> null(想要获取一个对象的原型链,可以连续地调用 Object.getPrototypeOf,直到原型链尽头)。

forEachmap 这些方式其实是 Array.prototype 这个对象的方法。

和数组不一样的是,NodeList 的原型链是这样的:

myNodeList --> NodeList.prototype --> Object.prototype --> null

NodeList的原型上除了类似数组的 forEach 方法之外,还有 itementrieskeysvalues 方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章