30

我想在其 CSS 包含特定背景颜色的 s 中选择一堆spans 。div我如何实现这一目标?

4

3 回答 3

45

如果我正确理解了这个问题,则选择器[attribute=value] 将不起作用,因为<span>它不包含属性“背景颜色”。您可以快速测试它以确认它不会匹配任何内容:

$('#someDiv span[background-color]').size(); // returns 0

给定:

.one, .two {
  background-color: black;
}

.three {
  background-color: red;
}

这是一个可以工作的片段:

$('div#someDiv span').filter(function() {
    var match = 'rgb(0, 0, 0)'; // match background-color: black
    /*
        true = keep this element in our wrapped set
        false = remove this element from our wrapped set
                                                         */
    return ( $(this).css('background-color') == match );

}).css('background-color', 'green'); // change background color of all black spans
.one, .two {
  background-color: black;
}

.three {
  background-color: red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>

<div id="someDiv">
    <span class="one">test one</span>
    <span class="two">test two</span>
    <span class="three">test three</span>
</div>

于 2008-11-12T00:08:49.733 回答
1

Javascript 方法

  1. 获取所有跨度
  2. 将 spans 节点列表转换为数组
  3. 过滤器跨越数组
  4. 更改匹配的 span 元素的背景颜色

// Get all spans
let spans = document.querySelectorAll('div#someDiv span'); 

// Convert spans nodeslist to array
spans = Array.from( spans ); 

// Filter spans array
// Get CSS properties object of selected element - [MDN](https://developer.mozilla.org/en-US/docs/Web/API/Window/getComputedStyle)
let arr = spans.filter( span => String( document.defaultView.getComputedStyle( span, null ).backgroundColor ) == 'rgb(0, 0, 0)' );

// Change background color of matched span elements
arr.forEach( span => {
    span.style.backgroundColor = 'green';
});
.one, .two {
  background-color: black;
}

.three {
  background-color: red;
}
<div id="someDiv">
    <span class="one">test one</span>
    <span class="two">test two</span>
    <span class="three">test three</span>
</div>

于 2021-01-30T11:17:25.953 回答
-7

使用属性选择器 [attribute=value] 来查找某个属性值。

#id_of_the_div span[background-color=rgb(255,255,255)]
于 2008-11-11T21:35:19.983 回答