您可以对每个元素使用window.getComputedStyle()
方法来检查元素是否具有您的绿色背景颜色。对于green
颜色,计算出来的样式是rgb(0, 128, 0)
的RGB 颜色。通过使用.filter()
,您可以返回一个新的元素数组,这些元素具有该值的计算背景颜色:
const elm = document.getElementsByClassName('elm');
const greenElms = [...elm].filter(function(s) {
const bgColor = getComputedStyle(s).backgroundColor;
return bgColor === "rgb(0, 128, 0)";
});
console.log(greenElms);
.elm {
width: 200px;
height: 100px;
}
.elm1 {
background-color: red;
}
.elm2 {
background-color: green;
}
.elm3 {
background-color: blue;
}
<div class="elm elm1"></div>
<div class="elm elm2"></div>
<div class="elm elm3"></div>
但是,大多数情况下,您的 CSS 是静态的,因此您在编写 JS 代码时会知道负责设置元素样式的样式/选择器是什么,因此您可以改用 .querySelectorAll()
匹配绿色背景样式所应用的相同元素,例如:
const greenElms = document.querySelectorAll('.elm2'); // NodeList (similar to an array)
console.log(greenElms);
.elm {
width: 200px;
height: 100px;
}
.elm1 {
background-color: red;
}
.elm2 {
background-color: green;
}
.elm3 {
background-color: blue;
}
<div class="elm elm1"></div>
<div class="elm elm2"></div>
<div class="elm elm3"></div>
【讨论】:
-
您好,第一个解决方案很好,但是否可以将 greenElms 设为元素而不是对象?过滤器函数返回一个对象,我使用
getElementsByClassName
的原因是我需要它是一个元素。 -
@nakar20966 过滤器函数返回一个元素数组。如果你有多个绿色元素,你想要什么结果?你只想要第一个吗?
-
getElementsByClassName
返回元素的 HTMLCollection(类似于数组)。它不返回单个元素。 -
如果只需要一个元素,可以将
.filter()
改为.find()
-
我只需要第一个元素,因为我确信只有一个元素匹配条件。我刚刚尝试将
filter
更改为find
方法,现在它运行良好!非常感谢