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 方法。

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