我想选择具有两个类别ab的所有元素。 >当我使用$(".a, .b")时,它给了我并集,但我想要交集。

评论

如果您可以定义联合和交集对我们newbs意味着什么,那就好了:)

@KolobCanyon联合和交集是基本的集合论概念。因此,例如,一个工会将是所有讲法语的人(包括男性和女性),而一个路口将是所有会讲法语的妇女(不包括所有不讲法语的人,并排除所有不是女性的人)。可以使用定义每个集合的任意数量的特征进行并集和相交。 en.wikipedia.org/wiki/联盟(set_theory)en.wikipedia.org/wiki/Intersection_(set_theory)

我认为您的意思是说,在“妇女”和“讲法语的人”这两个词集中,工会将是世界上所有妇女和世界上所有讲法语的人,其中包括不说话的妇女法语和说法语的人。正如您所写的那样,十字路口仅是那些会说法语的女性。

#1 楼

如果您只想匹配两个类的元素(一个交集,如逻辑AND),则只需将选择器写在一起,而它们之间不能有空格:不相关,因此您也可以交换以下类:

$('.a.b')


因此,将ID为diva元素与bc类进行匹配,可以这样写:

$('.b.a')


(在实践中,您很可能不需要特定于此,而ID或类选择器本身通常就足够了:$('#a')。) />

评论


@Flater:只是为了举例。但是,如果动态添加类b和c可能很有用,并且仅当元素具有这些类时才要选择该元素。

– Sasha Chedygov
2012年8月7日17:19



啊哈,好点子:-)到目前为止,我将使用.hasClass(),但这是一种更好的表示法。

–更
2012年8月8日在8:29

这种选择方法也适用于CSS,例如.a.b {样式属性}参见:css-tricks.com/multiple-class-id-selectors

–克里斯·哈克罗(Chris Halcrow)
2012年8月26日在23:54



@Shimmy:是的。两个选择器之间的空格表示您正在搜索后代。即.a .b搜索类别b的元素,这些元素是类别a的元素的后代。因此,像div a这样的东西只会返回div元素内部的元素。

– Sasha Chedygov
13年5月12日23:49



@AaA:那是不对的;自从jQuery诞生以来就是这样,因为CSS就是这样工作的。逗号选择的元素与两个选择器中的任何一个都匹配(将其视为逻辑或),而不是两者都选择,因此不是一回事(尽管我可以看到这可能会造成混淆)。

– Sasha Chedygov
15-10-15在3:41



#2 楼

您可以使用filter()函数执行此操作:

$(".a").filter(".b")


评论


这个答案和被接受的答案有什么区别?

–维维安河
2011年8月9日14:32

@Rice:这个会慢一些,因为它将首先建立一个具有“ a”类的对象列表,然后除去所有那些具有“ b”类的对象,而我的一步就是这样做的。但除此之外,没有区别。

– Sasha Chedygov
2011年9月8日上午9:39

在我正在搜索定义为变量的类的实例中,这对我有用,在第一个示例中,该类不适用于语法。例如:$('。foo')。filter(variable)。谢谢

–pac
2012年2月9日在22:28



@pac:$('。foo'+ variable)应该可以解决问题,但是我可以看到在这种情况下该方法在哪里更清晰。

– Sasha Chedygov
2012年2月14日上午10:19

如果您已经找到.a,并且需要基于也属于原始.a集的不同任意类进行多次过滤,则这样做会更加有效。

– Qix-蒙尼卡(MS)被盗
2014年12月12日21:50

#3 楼

对于这种情况

<element class="a">
  <element class="b c">
  </element>
</element>


您需要在.a.b.c之间放置一个空格

$('.a .b.c')


评论


添加到您的答案中,如果情况如下,我想知道如何访问b和c: ?通过$('。a .b.c')给出错误的结果。

–Ipsita Rout
13年4月6日在9:07

在此示例中,选择器$('。a .c.b')也会起作用吗?

–丹尼尔·W。
2014年8月22日在9:43

是的,因为顺序无关紧要。

–Zim84
'18 Sep 2'在8:40

$('。a>元素')

– Alex
18年9月3日,11:54

#4 楼

您遇到的问题是您使用的是Group Selector,而您应该使用的是Multiples selector!更具体地说,您使用的是$('.a, .b'),而您应该使用的是$('.a.b')。 br />组选择器:“,”

选择所有<h1>元素,所有<p>元素和所有<a>元素:

$('h1, p, a')


多重选择器: “”(无字符)

选择<input> type的所有text元素,并带有codered类: (空格)

选择<i>元素内的所有<p>元素:

$('input[type="text"].code.red')


子选择器:“>”

选择作为<ul>元素的直接子元素的所有<li>元素:

$('p i')


相邻兄弟选择器:“ +”

选择所有<a>元素放在<h2>元素之后:

$('li > ul')


常规同级选择器:“〜”

选择所有<span>元素,它们是<div>的同级元素:

#5 楼




 $('.a .b , .a .c').css('border', '2px solid yellow');
//selects b and c 

 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="a">a
  <div class="b">b</div>
  <div class="c">c</div>
  <div class="d">d</div>
</div> 




#6 楼

只需提及另一个带有element的情况:

例如<div id="title1" class="A B C">

只需输入:$("div#title1.A.B.C")

#7 楼

香草JavaScript解决方案:-

document.querySelectorAll('.a.b')

#8 楼

为了获得更好的性能,您可以使用

$('div.a.b')


这将只浏览div元素,而不是逐步浏览页面上所有的html元素。

#9 楼

组选择器

body {font-size: 12px; }
body {font-family: arial, helvetica, sans-serif;}
th {font-size: 12px; font-family: arial, helvetica, sans-serif;}
td {font-size: 12px; font-family: arial, helvetica, sans-serif;}


变成这样:

body, th, td {font-size: 12px; font-family: arial, helvetica, sans-serif;}


因此,在您的情况下,您尝试了组选择器,而它的交集

$(".a, .b") 


而不是使用此

$(".a.b") 


#10 楼

您不需要jQuery

Vanilla中,您可以:

document.querySelectorAll('.a.b')


评论


在2018年是对的,但不是这个问题在2009年被问到

– Michiel
19年3月18日在10:42

#11 楼

您的代码$(".a, .b")将同时适用于以下多个元素

<element class="a">
<element class="b">


如果要选择具有a和b两个元素的元素(如<element class="a b">),而不是使用js,昏迷

$('.a.b')


#12 楼

您可以根据需要使用getElementsByClassName()方法。




 var elems = document.getElementsByClassName("a b c");
elems[0].style.color = "green";
console.log(elems[0]); 

 <ul>
  <li class="a">a</li>
  <li class="a b">a, b</li>
  <li class="a b c">a, b, c</li>
</ul> 





这也是最快的解决方案。您可以在此处查看有关此基准的信息。

#13 楼

var elem = document.querySelector(“。a.b”);