JavaScript中querySelectorAll的基本用法及詳細(xì)解析
前言
querySelectorAll
是 JavaScript 中用于查找符合指定 CSS 選擇器的所有 DOM 元素的一個(gè)方法。與 querySelector
不同,querySelectorAll
返回的是一個(gè)靜態(tài)的 NodeList
,包含文檔中匹配選擇器的所有元素。
基本用法
let elements = document.querySelectorAll(selector);
selector
: 這是一個(gè) CSS 樣式規(guī)則的字符串,用于指定選擇器。elements
: 返回一個(gè)包含所有匹配元素的NodeList
(類數(shù)組對(duì)象)。如果沒有匹配項(xiàng),返回的NodeList
是空的。
詳細(xì)解析
1. 支持的選擇器
querySelectorAll
支持的選擇器與 querySelector
完全相同。它們的語法和功能與 CSS 選擇器保持一致。常見的選擇器有:
ID選擇器:
#id
let elements = document.querySelectorAll('#myId');
通常不需要使用 ID 選擇器,因?yàn)?ID 是唯一的,但技術(shù)上仍然可以使用。
類選擇器:
.class
let elements = document.querySelectorAll('.myClass');
返回所有
class
為myClass
的元素。標(biāo)簽選擇器:
tag
let elements = document.querySelectorAll('div');
返回所有的
<div>
元素。屬性選擇器:
[attribute=value]
let elements = document.querySelectorAll('input[type="text"]');
返回所有
type
屬性為"text"
的input
元素。后代選擇器:
ancestor descendant
let elements = document.querySelectorAll('#container .item');
返回
id
為container
的元素內(nèi)部的所有class="item"
的元素。偽類選擇器:
:pseudo-class
let elements = document.querySelectorAll('li:nth-child(odd)');
返回所有滿足
nth-child(odd)
規(guī)則的li
元素(即奇數(shù)位置的元素)。
2. 返回一個(gè)靜態(tài) NodeList
querySelectorAll
返回的是一個(gè) NodeList
,這是一個(gè)類數(shù)組對(duì)象,類似于 HTMLCollection
。它和真正的數(shù)組的區(qū)別主要體現(xiàn)在:
靜態(tài):
NodeList
是靜態(tài)的,意味著即使 DOM 發(fā)生變化,NodeList
內(nèi)部的元素不會(huì)更新。它是在調(diào)用querySelectorAll
時(shí)的那一刻被捕獲的元素。類數(shù)組: 雖然
NodeList
看起來像數(shù)組,但它不是一個(gè)真正的數(shù)組。它沒有數(shù)組的一些內(nèi)建方法,比如push()
和pop()
。不過你可以通過forEach
方法或通過Array.from()
將其轉(zhuǎn)為真正的數(shù)組。遍歷: 可以通過
for...of
循環(huán)、forEach
、或者基于索引的傳統(tǒng)for
循環(huán)來遍歷NodeList
。let elements = document.querySelectorAll('.myClass'); // 通過 forEach 遍歷 elements.forEach(function(element) { console.log(element); }); // 通過傳統(tǒng)的 for 循環(huán)遍歷 for (let i = 0; i < elements.length; i++) { console.log(elements[i]); } // 使用 for...of 遍歷 for (let element of elements) { console.log(element); }
3. 沒有找到匹配的元素
如果 querySelectorAll
沒有找到任何匹配的元素,它返回一個(gè)空的 NodeList
,而不是 null
。因此不需要像 querySelector
那樣檢查是否返回 null
。
let elements = document.querySelectorAll('.nonExistentClass'); console.log(elements.length); // 0,表示沒有找到匹配項(xiàng)
4. 作用域
querySelectorAll
可以在全局范圍 (document
) 或者在特定元素的作用域中使用。
let container = document.querySelector('#container'); let items = container.querySelectorAll('.item');
這將在 container
元素的范圍內(nèi),查找所有具有 .item
類的元素。
5. 偽類與組合選擇器
你可以通過組合選擇器和偽類選擇器來創(chuàng)建非常強(qiáng)大的查詢:
let elements = document.querySelectorAll('div > p:first-child');
這將返回所有 div
元素下的第一個(gè)子元素是 p
的元素。
6. 性能考慮
因?yàn)?nbsp;querySelectorAll
返回所有匹配的元素,如果選擇器非常復(fù)雜或者頁面包含大量匹配元素,可能會(huì)對(duì)性能產(chǎn)生影響。在需要查找大量元素時(shí),性能開銷可能較大。對(duì)于常見的操作,通常性能差異可以忽略不計(jì),但在大量操作中,簡化選擇器可以提高效率。
7. 與其他方法的比較
getElementsByClassName 和 getElementsByTagName
- 這些方法返回的也是類數(shù)組的
HTMLCollection
,但它們是實(shí)時(shí)的,意味著如果 DOM 發(fā)生變化,HTMLCollection
會(huì)實(shí)時(shí)更新,而NodeList
不會(huì)。
- 這些方法返回的也是類數(shù)組的
querySelector
querySelector
只返回第一個(gè)匹配的元素,而querySelectorAll
返回所有匹配的元素。
小結(jié)
querySelectorAll
是一個(gè)功能強(qiáng)大的方法,它允許你通過 CSS 選擇器來查找文檔中所有匹配的 DOM 元素。- 它返回一個(gè)靜態(tài)的
NodeList
,不會(huì)隨著 DOM 的變化而自動(dòng)更新。 - 它支持所有常見的 CSS 選擇器,并且可以使用組合和偽類選擇器來進(jìn)行復(fù)雜查詢。
- 性能方面在大量查找或復(fù)雜選擇器時(shí)需要謹(jǐn)慎使用。
querySelectorAll
提供了靈活的方式來操作和遍歷多個(gè) DOM 元素,是現(xiàn)代 JavaScript 操作 DOM 的核心工具之一。
到此這篇關(guān)于JavaScript中querySelectorAll的基本用法及詳細(xì)解析的文章就介紹到這了,更多相關(guān)JS中querySelectorAll詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
微信小程序?qū)崿F(xiàn)全局狀態(tài)管理的方法整理
已知微信小程序中如果要做到全局狀態(tài)共享,常用的有四種方式,分別是globalData、本地緩存、mobx-miniprogram和westore,本文將帶大家看看mobx-miniprogram是如何實(shí)現(xiàn)的小程序的全局狀態(tài)管理,需要的可以收藏一下2023-06-06小程序接口的promise化的實(shí)現(xiàn)方法
這篇文章主要介紹了小程序接口的promise化的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12JavaScript 報(bào)表展示實(shí)現(xiàn)代碼
以下是從網(wǎng)上找到的一段JavaScript實(shí)現(xiàn)圖形報(bào)表的代碼,對(duì)于想客戶端顯示報(bào)表的朋友可以參考下。2009-12-12在JavaScript中構(gòu)建ArrayList示例代碼
這篇文章主要介紹了在JavaScript中構(gòu)建ArrayList,很實(shí)用,需要的朋友可以參考下2014-09-09微信小程序?qū)崿F(xiàn)動(dòng)態(tài)驗(yàn)證碼
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)動(dòng)態(tài)驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05uniapp手寫滾動(dòng)選擇器的完整代碼(時(shí)間選擇器)
這篇文章主要介紹了uniapp手寫滾動(dòng)選擇器的完整代碼(時(shí)間選擇器),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-07-07JS監(jiān)聽瀏覽器關(guān)閉、刷新及切換標(biāo)簽頁觸發(fā)事件代碼示例
瀏覽器是客戶端,客戶端的操作服務(wù)器是監(jiān)聽不到的,所以可以用js來監(jiān)聽,js代碼監(jiān)聽瀏覽器關(guān)閉或者刷新,這篇文章主要給大家介紹了關(guān)于JS監(jiān)聽瀏覽器關(guān)閉、刷新及切換標(biāo)簽頁觸發(fā)事件的相關(guān)資料,需要的朋友可以參考下2023-11-11