CSS/JQuery 选择器:有没有在类中选择类?

Posted

技术标签:

【中文标题】CSS/JQuery 选择器:有没有在类中选择类?【英文标题】:CSS/JQuery selectors: Is there anyway to select classes in classes? 【发布时间】:2013-04-04 05:51:15 【问题描述】:

假设我们有以下标记:

<div class="t-shirt black blue">Example</div>
<div class="t-shirt white blue">Example</div>
<div class="sweater black blue">Example</div>
<div class="sweater black red">Example</div>
<div class="sweater white red">Example</div>
<div class="hat black blue">Example</div>
<div class="hat black red">Example</div>
<div class="hat white red">Example</div>

有没有办法用一个选择器选择黑色和蓝色的t-shirtsweater?我的意思是,不使用逗号分隔的选择器。

例如,我不想做以下事情:

var wanted = $('.t-shirt.black.blue, .sweater.black.blue');

有没有做类似下面的事情? (我知道它不起作用):

var wanted = $('(.t-shirt, .sweater).black.blue');

提前致谢。

【问题讨论】:

不,你需要一个逗号来做或。 你确定?你有什么更好的选择吗? 为什么没有逗号分隔的选择器? 【参考方案1】:

不,没有。既不是 jQuery 也不是 CSS。

即使有用于分组选择器部分的功能性伪类(例如 Selectors 4 中即将推出的 :matches()),您仍然需要提供这些类的逗号分隔列表:

:matches(.t-shirt, .sweater).black.blue

不用说,上面的选择器在任何浏览器中都不起作用(目前)。你可以implement it yourself as a Sizzle extension如果你真的想,但老实说我不会打扰。

【讨论】:

有几天,在这里,在 Stack Overflow,当我看到你的答案并认为我应该给你所有我的赞成票。 ...自动地。 +1(不用说!):) @David Thomas:我是什么,[css] 的 Jon Skeet? ;) 基本上:是的,实际上。 ;)【参考方案2】:

你可以这样做:

var wanted = $('.black.blue').filter('.t-shirt, .sweater');

但是

var wanted = $('.t-shirt.black.blue, .sweater.black.blue');

无论如何可能更有效(虽然我没有测试过)

【讨论】:

我将使用.filter()。谢谢。 +1【参考方案3】:

如果唯一的目标不是使用逗号,您可以这样做:

var blackblue = $(".black.blue"),
    tshirts = blackblue.filter(".t-shirt"),
    sweaters = blackblue.filter(".sweater"),
    both = tshirts.add(sweaters);

但是我看不出它有什么更好的地方,除非它能让你更好地组织起来。

【讨论】:

【参考方案4】:
var selectionLevel1 = $(".t-shirt, .sweater").andSelf();
var finalSelection = $(".black", selectionLevel1);

【讨论】:

以上是关于CSS/JQuery 选择器:有没有在类中选择类?的主要内容,如果未能解决你的问题,请参考以下文章

在类中选择一个类并使其具有自己的行

jQuery类选择器在类更改后不选择

可选择在类方法上使用装饰器

在类中声明装饰器

Highcharts 重排不适用于类选择器

高级 CSS/Jquery 选择器