querySelectorAll()
是 JavaScript 中 Document 和 Element 接口的方法,它返回文档中匹配指定 CSS 选择器的所有元素的静态 NodeList(节点列表)。当需要查找具有多个类名的元素时,这个方法特别有用。
elementList = parentNode.querySelectorAll(selectors);
selectors
: 一个包含一个或多个 CSS 选择器的字符串要查找同时具有多个类的元素,可以使用以下方法:
// 查找同时具有 class1 和 class2 的元素
const elements = document.querySelectorAll('.class1.class2');
// 查找具有 class1 或 class2 的元素
const elements = document.querySelectorAll('.class1, .class2');
// 查找具有 class1 和 class2,但不具有 class3 的元素
const elements = document.querySelectorAll('.class1.class2:not(.class3)');
getElementsByClassName
更灵活原因:
解决方案:
// 确保 DOM 加载完成后再执行查询
document.addEventListener('DOMContentLoaded', function() {
const elements = document.querySelectorAll('.class1.class2');
console.log(elements);
});
解决方案:
// 使用 forEach (现代浏览器)
document.querySelectorAll('.class1.class2').forEach(element => {
console.log(element);
});
// 或使用传统 for 循环
const elements = document.querySelectorAll('.class1.class2');
for (let i = 0; i < elements.length; i++) {
console.log(elements[i]);
}
解决方案:
// 使用 Array.from()
const elementsArray = Array.from(document.querySelectorAll('.class1.class2'));
// 或使用扩展运算符
const elementsArray = [...document.querySelectorAll('.class1.class2')];
<!DOCTYPE html>
<html>
<head>
<title>querySelectorAll 示例</title>
<style>
.active { color: red; }
.highlight { background-color: yellow; }
.important { font-weight: bold; }
</style>
</head>
<body>
<div class="active highlight">同时具有 active 和 highlight 类的元素</div>
<div class="active">只有 active 类的元素</div>
<div class="highlight important">highlight 和 important 类的元素</div>
<script>
// 查找同时具有 active 和 highlight 类的元素
const activeHighlightElements = document.querySelectorAll('.active.highlight');
console.log('同时具有 active 和 highlight 类的元素:', activeHighlightElements);
// 查找具有 highlight 或 important 类的元素
const highlightOrImportant = document.querySelectorAll('.highlight, .important');
console.log('具有 highlight 或 important 类的元素:', highlightOrImportant);
// 修改所有匹配元素的样式
document.querySelectorAll('.active.highlight').forEach(el => {
el.style.border = '2px solid blue';
});
</script>
</body>
</html>
通过合理使用 querySelectorAll
和 CSS 类选择器组合,可以高效地定位和操作 DOM 中的特定元素。