我想选择具有两个类 a 和 b 的所有元素 .
a
b
<element class="a b">
所以,只有具有两个类的元素 .
当我使用 $(".a, .b") 它给了我联盟,但我想要交集 .
$(".a, .b")
您可以使用filter()函数执行此操作:
$(".a").filter(".b")
为了获得更好的性能,您可以使
$('div.a.b')
这将只通过div元素,而不是单步执行页面上的所有html元素 .
你遇到的问题是你正在使用 Group Selector ,而你应该使用 Multiples selector !更具体地说,你使用 $('.a, .b') ,而你应该使用 $('.a.b') .
Group Selector
Multiples selector
$('.a, .b')
$('.a.b')
有关更多信息,请参阅下面组合选择器的不同方法的概述!
选择所有 <h1> 元素和所有 <p> 元素以及所有 <a> 元素:
<h1>
<p>
<a>
$('h1, p, a')
选择 type text 的所有 <input> 元素,类为 code 和 red :
type
text
<input>
code
red
$('input[type="text"].code.red')
选择 <p> 元素内的所有 <i> 元素:
<i>
$('p i')
选择 <li> 元素的直接子元素的所有 <ul> 元素:
<li>
<ul>
$('li > ul')
选择紧跟在 <h2> 元素后面的所有 <a> 元素:
<h2>
$('h2 + a')
选择所有 <span> 元素,它们是 <div> 元素的兄弟:
<span>
<div>
$('div ~ span')
Vanilla JavaScript解决方案: -
document.querySelectorAll('.a.b')
你不需要 jQuery
jQuery
在 Vanilla 你可以这样做:
Vanilla
对于这种情况
<element class="a"> <element class="b c"> </element> </element>
您需要在 .a 和 .b.c 之间放置一个空格
.a
.b.c
$('.a .b.c')
如果你只想匹配 both 类的元素(交集,就像逻辑AND),只需将选择器一起写入 without spaces 之间:
订单不相关,因此您也可以交换类:
$('.b.a')
因此,要将ID为 a 的 div 元素与类 b 和 c 进行匹配,您需要编写:
div
c
$('div#a.b.c')
(在实践中,您很可能不需要获取特定内容,并且ID或类选择器本身通常就足够了: $('#a') . )
$('#a')
$('.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>
组选择器
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")
您可以根据需要使用 getElementsByClassName() 方法 .
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>
这也是最快的解决方案 . 你可以看到关于here的基准 .
只需提及元素的另一个案例:
例如 . <div id="title1" class="A B C">
<div id="title1" class="A B C">
只需输入: $("div#title1.A.B.C")
$("div#title1.A.B.C")
11 回答
您可以使用filter()函数执行此操作:
为了获得更好的性能,您可以使
这将只通过div元素,而不是单步执行页面上的所有html元素 .
你遇到的问题是你正在使用
Group Selector
,而你应该使用Multiples selector
!更具体地说,你使用$('.a, .b')
,而你应该使用$('.a.b')
.有关更多信息,请参阅下面组合选择器的不同方法的概述!
组选择器:“,”
选择所有
<h1>
元素和所有<p>
元素以及所有<a>
元素:倍数选择器:“”(无字符)
选择
type
text
的所有<input>
元素,类为code
和red
:后代选择器:“”(空格)
选择
<p>
元素内的所有<i>
元素:子选择器:“>”
选择
<li>
元素的直接子元素的所有<ul>
元素:相邻的兄弟选择器:“”
选择紧跟在
<h2>
元素后面的所有<a>
元素:一般同级选择器:“〜”
选择所有
<span>
元素,它们是<div>
元素的兄弟:Vanilla JavaScript解决方案: -
document.querySelectorAll('.a.b')
你不需要
jQuery
在
Vanilla
你可以这样做:对于这种情况
您需要在
.a
和.b.c
之间放置一个空格如果你只想匹配 both 类的元素(交集,就像逻辑AND),只需将选择器一起写入 without spaces 之间:
订单不相关,因此您也可以交换类:
因此,要将ID为
a
的div
元素与类b
和c
进行匹配,您需要编写:(在实践中,您很可能不需要获取特定内容,并且ID或类选择器本身通常就足够了:
$('#a')
. )组选择器
变成这样:
所以在你的情况下你已经尝试了组选择器,而它是一个交集
而是使用这个
您可以根据需要使用
getElementsByClassName()
方法 .这也是最快的解决方案 . 你可以看到关于here的基准 .
只需提及元素的另一个案例:
例如 .
<div id="title1" class="A B C">
只需输入:
$("div#title1.A.B.C")