使用 JavaScript 通过多个类名获取元素
Get Elements by multiple Class Names using JavaScript
使用该getElementsByClassName
方法通过多个类名获取元素。
该方法返回一个类似数组的对象,其中包含具有所有给定类名的所有元素。
这是示例的 HTML。
<!DOCTYPE html> <html lang="en"> <head> <title>bobbyhadz.com</title> <meta charset="UTF-8" /> <style> .green { background-color: greenyellow; } .orange { background-color: orange; } </style> </head> <body> <div class="box green">Box 1</div> <div class="box green">Box 2</div> <div class="box orange">Box 3</div> <script src="index.js"></script> </body> </html>
这是相关的 JavaScript 代码。
// ✅ Get all elements with classes `box` AND `green` const elements1 = document.getElementsByClassName('box green'); console.log(elements1); // 👉️ [div.box.green, div.box.green] // ---------------------------------------------------- // ✅ Get all elements with classes `box` AND `green` const elements2 = document.querySelectorAll('.box.green'); console.log(elements2); // 👉️ [div.box.green, div.box.green] // ---------------------------------------------------- // ✅ Get all elements with at least one of the classes const elements3 = document.querySelectorAll('.box, .green'); // 👇️ [div.box.green, div.box.green, div.box.orange] console.log(elements3);
querySelector
querySelectorAll
我们
在第一个示例中使用了document.getElementsByClassName方法。
// ✅ Get all elements with classes `box` AND `green` const elements1 = document.getElementsByClassName('box green'); console.log(elements1); // 👉️ [div.box.green, div.box.green]
该方法将一个或多个类名作为参数,并返回一个
HTMLCollection
包含所有提供的类名的元素。
将集合转化为数组
如果您需要将 视为HTMLCollection
数组,例如使用 之类的方法
forEach()
,请使用 方法将其转换为数组Array.from()
。
const elements1 = Array.from( document.getElementsByClassName('box green') ); elements1.forEach(element => { console.log(element); });
Array.from方法从提供的可迭代对象创建一个新的浅拷贝数组。
使用 querySelectorAll 按多个类名获取元素
第二个示例使用
document.querySelectorAllbox
方法获取具有类和的元素green
。
// ✅ Get all elements with classes `box` AND `green` const elements2 = document.querySelectorAll('.box.green'); console.log(elements2); // 👉️ [div.box.green, div.box.green]
NodeList
包含与选择器匹配的元素的 。获取第一个有多个类名的元素
如果您需要获取第一个具有类box
和的元素green
,请改用该querySelector
方法。
// ✅ Get the first element with classes `box` AND `green` const elements2 = document.querySelector('.box.green'); console.log(elements2); // 👉️ div.box.green
获取至少具有多个类之一的元素
第三个示例使用querySelectorAll
方法获取至少具有类box
和之一的元素green
。
// ✅ Get all elements with at least one of classes `box` or `green` const elements3 = document.querySelectorAll('.box, .green'); console.log(elements3); // 👉️ [div.box.green, div.box.green, div.box.orange]
querySelectorAll
您可以根据需要将尽可能多的逗号分隔选择器传递给该方法。
获取具有一个类但没有另一个类的元素
您还可以选择具有其中一个类但不具有另一个类的元素。
const elements4 = document.querySelectorAll( '.box:not(.orange)' ); console.log(elements4); // 👉️ [div.box.green, div.box.green]
The example selects the elements that have a class of box
but don’t have the
class of orange
.
# Narrow the results down
You can also narrow the results down by adding a specific tag name to the
selector.
// ✅ Get all DIV elements with classes `box` AND `green` const elements5 = document.querySelectorAll('div.box.green'); console.log(elements5); // 👉️ [div.box.green, div.box.green]
The example shows how to get all div
elements that have both classes – box
and green
.
This selector would not match any span
or p
elements that have the same
classes.
# Additional Resources
You can learn more about the related topics by checking out the following
tutorials: