a
和b
的所有元素。 >当我使用$(".a, .b")
时,它给了我并集,但我想要交集。#1 楼
如果您只想匹配两个类的元素(一个交集,如逻辑AND),则只需将选择器写在一起,而它们之间不能有空格:不相关,因此您也可以交换以下类:$('.a.b')
因此,将ID为
div
的a
元素与b
和c
类进行匹配,可以这样写: $('.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:
–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
元素,并带有code
和red
类: (空格)选择
<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>
这也是最快的解决方案。您可以在此处查看有关此基准的信息。
评论
如果您可以定义联合和交集对我们newbs意味着什么,那就好了:)@KolobCanyon联合和交集是基本的集合论概念。因此,例如,一个工会将是所有讲法语的人(包括男性和女性),而一个路口将是所有会讲法语的妇女(不包括所有不讲法语的人,并排除所有不是女性的人)。可以使用定义每个集合的任意数量的特征进行并集和相交。 en.wikipedia.org/wiki/联盟(set_theory)en.wikipedia.org/wiki/Intersection_(set_theory)
我认为您的意思是说,在“妇女”和“讲法语的人”这两个词集中,工会将是世界上所有妇女和世界上所有讲法语的人,其中包括不说话的妇女法语和说法语的人。正如您所写的那样,十字路口仅是那些会说法语的女性。