JavaScript精準(zhǔn)捕獲DOM元素五種方法
在 JavaScript 中,要想對網(wǎng)頁元素進(jìn)行操作——無論是修改內(nèi)容、調(diào)整樣式還是響應(yīng)用戶交互——第一步永遠(yuǎn)是找到這個元素。這就需要我們熟練掌握從 DOM 樹中獲取特定元素的方法。本文將詳細(xì)介紹五種最常用、最重要的 DOM 查詢方法,助你輕松定位目標(biāo)元素。
1. 根據(jù) ID 獲取元素:getElementById
這是最常見、最快速的查找方式。因為 HTML 規(guī)范要求 id 在整個文檔中必須是唯一的,所以此方法只返回一個元素。
- 語法:
document.getElementById(idString) - 參數(shù):
idString- 一個字符串,對應(yīng)目標(biāo)元素的id屬性值。 - 返回值: 匹配的 Element 對象,若未找到則返回
null。
// HTML: <div id="main-content">...</div>
const mainDiv = document.getElementById('main-content');
if (mainDiv) { // 檢查元素是否存在
console.log(mainDiv.textContent); // 操作元素
}
2. 根據(jù)標(biāo)簽名獲取元素:getElementsByTagName
獲取指定標(biāo)簽名的所有元素。
- 語法:
document.getElementsByTagName(tagName) - 參數(shù):
tagName- 一個字符串,表示要匹配的標(biāo)簽名(如'div','p','a')。傳入'*'可獲取所有元素。 - 返回值: 一個 HTMLCollection 對象(類數(shù)組對象),包含所有匹配的元素。
// HTML: <p>Paragraph 1</p> <p>Paragraph 2</p>
const allParagraphs = document.getElementsByTagName('p');
console.log(allParagraphs.length); // 輸出: 2
for (let i = 0; i < allParagraphs.length; i++) {
allParagraphs[i].style.color = 'blue'; // 批量修改樣式
}
3. 根據(jù)類名獲取元素:getElementsByClassName
獲取具有指定 class 名的所有元素。
- 語法:
document.getElementsByClassName(className) - 參數(shù):
className- 一個字符串,表示要匹配的class屬性值。 - 返回值: 一個 HTMLCollection 對象,包含所有匹配的元素。
// HTML: <span class="highlight">Text A</span> <div class="highlight">Text B</div>
const highlightedElements = document.getElementsByClassName('highlight');
Array.from(highlightedElements).forEach(el => {
el.style.backgroundColor = 'yellow'; // 使用 Array.from 將 HTMLCollection 轉(zhuǎn)換為數(shù)組以便使用 forEach
});
4. 根據(jù)name屬性獲取元素:getElementsByName
主要用于獲取具有特定 name 屬性的元素(常見于表單控件)。
- 語法:
document.getElementsByName(name) - 參數(shù):
name- 一個字符串,表示要匹配的name屬性值。 - 返回值: 一個 NodeList 對象,包含所有匹配的元素。
// HTML: <input name="username" type="text"> <input name="password" type="password">
const usernameInputs = document.getElementsByName('username');
console.log(usernameInputs[0].value); // 獲取用戶名輸入框的值
5. 使用 CSS 選擇器獲取元素:querySelector和querySelectorAll
這是最強(qiáng)大、最靈活的查詢方式,支持標(biāo)準(zhǔn)的 CSS 選擇器語法。
5.1. 獲取第一個匹配元素:querySelector
- 語法:
document.querySelector(selectors) - 參數(shù):
selectors- 一個字符串,包含一個或多個 CSS 選擇器(如'.my-class','#my-id','div > p','input[type="text"]'等)。 - 返回值: 匹配指定選擇器的第一個 Element 對象,若未找到則返回
null。
// HTML: <div class="container"><p class="intro">Hello</p><p>World</p></div>
const firstIntroParagraph = document.querySelector('.intro'); // 獲取第一個 class 為 intro 的 p 元素
console.log(firstIntroParagraph.textContent); // 輸出: Hello
const firstDivWithContainerClass = document.querySelector('div.container'); // 獲取第一個 class 為 container 的 div
5.2. 獲取所有匹配元素:querySelectorAll
- 語法:
document.querySelectorAll(selectors) - 參數(shù):
selectors- 一個字符串,包含一個或多個 CSS 選擇器。 - 返回值: 一個 NodeList 對象,包含所有匹配指定選擇器的 Element 對象。
// HTML: <p class="note">Note 1</p> <aside class="note">Note 2</aside>
const allNotes = document.querySelectorAll('.note'); // 獲取所有 class 為 note 的元素
allNotes.forEach(note => {
note.style.border = '1px solid green';
});
HTMLCollectionvsNodeList
- HTMLCollection (來自
getElementsBy...方法): 是一個動態(tài)集合。當(dāng) DOM 結(jié)構(gòu)發(fā)生變化(如添加或刪除了匹配的元素),這個集合會自動更新。 - NodeList (來自
querySelectorAll): 是一個靜態(tài)(快照)集合。獲取后,其內(nèi)容不會隨 DOM 的變化而變化。
注意: querySelectorAll 返回的 NodeList 雖然是靜態(tài)的,但它比 getElementsBy... 返回的動態(tài)集合更常被使用,因為它支持更廣泛的 CSS 選擇器,并且可以通過 forEach, map, filter 等數(shù)組方法進(jìn)行遍歷(需要先轉(zhuǎn)換或使用 for...of 循環(huán))。
方法選擇建議
- 查找單個唯一元素: 優(yōu)先使用
document.getElementById(id),效率最高。 - 需要強(qiáng)大的選擇能力: 使用
document.querySelector(selectors)(單個) 或document.querySelectorAll(selectors)(多個)。它們的 CSS 選擇器語法極其靈活,幾乎能滿足所有查找需求。 - 按標(biāo)簽或類名批量查找:
document.getElementsByTagName(tagName)和document.getElementsByClassName(className)也是很好的選擇,尤其當(dāng)你確實需要動態(tài)集合時(雖然大部分場景下querySelectorAll已足夠)。
結(jié)語
掌握這些 DOM 查詢方法是進(jìn)行前端開發(fā)的基礎(chǔ)。getElementById 用于精準(zhǔn)定位,querySelector/querySelectorAll 用于靈活查找,getElementsBy... 系列則提供了基于標(biāo)簽、類名、屬性的傳統(tǒng)方式。根據(jù)實際需求選擇合適的方法,你就能輕松地在 DOM 樹中找到任何你想操作的元素。
以上就是JavaScript精準(zhǔn)捕獲DOM元素五種方法的詳細(xì)內(nèi)容,更多關(guān)于JavaScript捕獲DOM元素的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JavaScript Promise原理與實現(xiàn)刨析
首先呢,Promise是異步中比較重要的知識點,學(xué)習(xí)的最好方法就是掌握它的基本原理。所以這一篇主要說一下如何用JS來實現(xiàn)一個自己的promise2022-10-10

