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ì)象)。如果沒(méi)有匹配項(xiàng),返回的NodeList是空的。
詳細(xì)解析
1. 支持的選擇器
querySelectorAll 支持的選擇器與 querySelector 完全相同。它們的語(yǔ)法和功能與 CSS 選擇器保持一致。常見(jiàn)的選擇器有:
ID選擇器:
#idlet elements = document.querySelectorAll('#myId');通常不需要使用 ID 選擇器,因?yàn)?ID 是唯一的,但技術(shù)上仍然可以使用。
類選擇器:
.classlet elements = document.querySelectorAll('.myClass');返回所有
class為myClass的元素。標(biāo)簽選擇器:
taglet elements = document.querySelectorAll('div');返回所有的
<div>元素。屬性選擇器:
[attribute=value]let elements = document.querySelectorAll('input[type="text"]');返回所有
type屬性為"text"的input元素。后代選擇器:
ancestor descendantlet elements = document.querySelectorAll('#container .item');返回
id為container的元素內(nèi)部的所有class="item"的元素。偽類選擇器:
:pseudo-classlet 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看起來(lái)像數(shù)組,但它不是一個(gè)真正的數(shù)組。它沒(méi)有數(shù)組的一些內(nèi)建方法,比如push()和pop()。不過(guò)你可以通過(guò)forEach方法或通過(guò)Array.from()將其轉(zhuǎn)為真正的數(shù)組。遍歷: 可以通過(guò)
for...of循環(huán)、forEach、或者基于索引的傳統(tǒng)for循環(huán)來(lái)遍歷NodeList。let elements = document.querySelectorAll('.myClass'); // 通過(guò) forEach 遍歷 elements.forEach(function(element) { console.log(element); }); // 通過(guò)傳統(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. 沒(méi)有找到匹配的元素
如果 querySelectorAll 沒(méi)有找到任何匹配的元素,它返回一個(gè)空的 NodeList,而不是 null。因此不需要像 querySelector 那樣檢查是否返回 null。
let elements = document.querySelectorAll('.nonExistentClass');
console.log(elements.length); // 0,表示沒(méi)有找到匹配項(xiàng)
4. 作用域
querySelectorAll 可以在全局范圍 (document) 或者在特定元素的作用域中使用。
let container = document.querySelector('#container');
let items = container.querySelectorAll('.item');
這將在 container 元素的范圍內(nèi),查找所有具有 .item 類的元素。
5. 偽類與組合選擇器
你可以通過(guò)組合選擇器和偽類選擇器來(lái)創(chuàng)建非常強(qiáng)大的查詢:
let elements = document.querySelectorAll('div > p:first-child');
這將返回所有 div 元素下的第一個(gè)子元素是 p 的元素。
6. 性能考慮
因?yàn)?nbsp;querySelectorAll 返回所有匹配的元素,如果選擇器非常復(fù)雜或者頁(yè)面包含大量匹配元素,可能會(huì)對(duì)性能產(chǎn)生影響。在需要查找大量元素時(shí),性能開(kāi)銷可能較大。對(duì)于常見(jiàn)的操作,通常性能差異可以忽略不計(jì),但在大量操作中,簡(jiǎn)化選擇器可以提高效率。
7. 與其他方法的比較
getElementsByClassName 和 getElementsByTagName
- 這些方法返回的也是類數(shù)組的
HTMLCollection,但它們是實(shí)時(shí)的,意味著如果 DOM 發(fā)生變化,HTMLCollection會(huì)實(shí)時(shí)更新,而NodeList不會(huì)。
- 這些方法返回的也是類數(shù)組的
querySelectorquerySelector只返回第一個(gè)匹配的元素,而querySelectorAll返回所有匹配的元素。
小結(jié)
querySelectorAll是一個(gè)功能強(qiáng)大的方法,它允許你通過(guò) CSS 選擇器來(lái)查找文檔中所有匹配的 DOM 元素。- 它返回一個(gè)靜態(tài)的
NodeList,不會(huì)隨著 DOM 的變化而自動(dòng)更新。 - 它支持所有常見(jiàn)的 CSS 選擇器,并且可以使用組合和偽類選擇器來(lái)進(jìn)行復(fù)雜查詢。
- 性能方面在大量查找或復(fù)雜選擇器時(shí)需要謹(jǐn)慎使用。
querySelectorAll 提供了靈活的方式來(lái)操作和遍歷多個(gè) DOM 元素,是現(xiàn)代 JavaScript 操作 DOM 的核心工具之一。
到此這篇關(guān)于JavaScript中querySelectorAll的基本用法及詳細(xì)解析的文章就介紹到這了,更多相關(guān)JS中querySelectorAll詳解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- javascript之querySelector和querySelectorAll使用介紹
- javascript?DOM?querySelectorAll()?使用方法
- javascript之querySelector和querySelectorAll使用說(shuō)明
- javascript高級(jí)選擇器querySelector和querySelectorAll全面解析
- JavaScript基于querySelector?/?querySelectorAll對(duì)元素的操作(DOM?API掃盲)
- JavaScript選擇器函數(shù)querySelector和querySelectorAll
相關(guān)文章
微信小程序全局?jǐn)?shù)據(jù)共享和分包圖文詳解
全局?jǐn)?shù)據(jù)共享是為了解決組件之間數(shù)據(jù)共享的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于微信小程序全局?jǐn)?shù)據(jù)共享和分包的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09
JavaScript中SQL語(yǔ)句的應(yīng)用實(shí)現(xiàn)
最近一直在用javascript在做項(xiàng)目 可是做著做著 感覺(jué)很多功能代碼都是重復(fù)的。2010-05-05
利用weixin-java-miniapp生成小程序碼并直接返回圖片文件流的方法
這篇文章主要介紹了利用weixin-java-miniapp生成小程序碼并直接返回圖片文件流的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
JavaScript實(shí)現(xiàn)動(dòng)態(tài)高度過(guò)渡的3種方式總結(jié)
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)動(dòng)態(tài)高度過(guò)渡的3種方式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01
JS基于正則實(shí)現(xiàn)數(shù)字千分位用逗號(hào)分隔的方法
這篇文章主要介紹了JS基于正則實(shí)現(xiàn)數(shù)字千分位用逗號(hào)分隔的方法,涉及javascript正則表達(dá)式操作數(shù)字的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-06-06
基于JavaScript實(shí)現(xiàn)多級(jí)菜單效果
這篇文章主要為大家詳細(xì)介紹了基于JavaScript實(shí)現(xiàn)多級(jí)菜單效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
JavaScript表單驗(yàn)證的兩種實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了JavaScript表單驗(yàn)證的兩種實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02

