JavaScript中querySelectorAll的基本用法及詳細解析
前言
querySelectorAll 是 JavaScript 中用于查找符合指定 CSS 選擇器的所有 DOM 元素的一個方法。與 querySelector 不同,querySelectorAll 返回的是一個靜態(tài)的 NodeList,包含文檔中匹配選擇器的所有元素。
基本用法
let elements = document.querySelectorAll(selector);
selector: 這是一個 CSS 樣式規(guī)則的字符串,用于指定選擇器。elements: 返回一個包含所有匹配元素的NodeList(類數組對象)。如果沒有匹配項,返回的NodeList是空的。
詳細解析
1. 支持的選擇器
querySelectorAll 支持的選擇器與 querySelector 完全相同。它們的語法和功能與 CSS 選擇器保持一致。常見的選擇器有:
ID選擇器:
#idlet elements = document.querySelectorAll('#myId');通常不需要使用 ID 選擇器,因為 ID 是唯一的,但技術上仍然可以使用。
類選擇器:
.classlet elements = document.querySelectorAll('.myClass');返回所有
class為myClass的元素。標簽選擇器:
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的元素內部的所有class="item"的元素。偽類選擇器:
:pseudo-classlet elements = document.querySelectorAll('li:nth-child(odd)');返回所有滿足
nth-child(odd)規(guī)則的li元素(即奇數位置的元素)。
2. 返回一個靜態(tài) NodeList
querySelectorAll 返回的是一個 NodeList,這是一個類數組對象,類似于 HTMLCollection。它和真正的數組的區(qū)別主要體現在:
靜態(tài):
NodeList是靜態(tài)的,意味著即使 DOM 發(fā)生變化,NodeList內部的元素不會更新。它是在調用querySelectorAll時的那一刻被捕獲的元素。類數組: 雖然
NodeList看起來像數組,但它不是一個真正的數組。它沒有數組的一些內建方法,比如push()和pop()。不過你可以通過forEach方法或通過Array.from()將其轉為真正的數組。遍歷: 可以通過
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 沒有找到任何匹配的元素,它返回一個空的 NodeList,而不是 null。因此不需要像 querySelector 那樣檢查是否返回 null。
let elements = document.querySelectorAll('.nonExistentClass');
console.log(elements.length); // 0,表示沒有找到匹配項
4. 作用域
querySelectorAll 可以在全局范圍 (document) 或者在特定元素的作用域中使用。
let container = document.querySelector('#container');
let items = container.querySelectorAll('.item');
這將在 container 元素的范圍內,查找所有具有 .item 類的元素。
5. 偽類與組合選擇器
你可以通過組合選擇器和偽類選擇器來創(chuàng)建非常強大的查詢:
let elements = document.querySelectorAll('div > p:first-child');
這將返回所有 div 元素下的第一個子元素是 p 的元素。
6. 性能考慮
因為 querySelectorAll 返回所有匹配的元素,如果選擇器非常復雜或者頁面包含大量匹配元素,可能會對性能產生影響。在需要查找大量元素時,性能開銷可能較大。對于常見的操作,通常性能差異可以忽略不計,但在大量操作中,簡化選擇器可以提高效率。
7. 與其他方法的比較
getElementsByClassName 和 getElementsByTagName
- 這些方法返回的也是類數組的
HTMLCollection,但它們是實時的,意味著如果 DOM 發(fā)生變化,HTMLCollection會實時更新,而NodeList不會。
- 這些方法返回的也是類數組的
querySelectorquerySelector只返回第一個匹配的元素,而querySelectorAll返回所有匹配的元素。
小結
querySelectorAll是一個功能強大的方法,它允許你通過 CSS 選擇器來查找文檔中所有匹配的 DOM 元素。- 它返回一個靜態(tài)的
NodeList,不會隨著 DOM 的變化而自動更新。 - 它支持所有常見的 CSS 選擇器,并且可以使用組合和偽類選擇器來進行復雜查詢。
- 性能方面在大量查找或復雜選擇器時需要謹慎使用。
querySelectorAll 提供了靈活的方式來操作和遍歷多個 DOM 元素,是現代 JavaScript 操作 DOM 的核心工具之一。
到此這篇關于JavaScript中querySelectorAll的基本用法及詳細解析的文章就介紹到這了,更多相關JS中querySelectorAll詳解內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
JS監(jiān)聽瀏覽器關閉、刷新及切換標簽頁觸發(fā)事件代碼示例
瀏覽器是客戶端,客戶端的操作服務器是監(jiān)聽不到的,所以可以用js來監(jiān)聽,js代碼監(jiān)聽瀏覽器關閉或者刷新,這篇文章主要給大家介紹了關于JS監(jiān)聽瀏覽器關閉、刷新及切換標簽頁觸發(fā)事件的相關資料,需要的朋友可以參考下2023-11-11

