I want to select all the elements that have the two classes a
and b
.
<element class="a b">
So, only the elements that have both classes.
When I use $(".a, .b")
it gives me the union, but I want the intersection.
If you want to match only elements with both classes (an intersection, like a logical AND), just write the selectors together without spaces in between:
$('.a.b')
The order is not relevant, so you can also swap the classes:
$('.b.a')
So to match a div
element that has an ID of a
with classes b
and c
, you would write:
$('div#a.b.c')
(In practice, you most likely don't need to get that specific, and an ID or class selector by itself is usually enough: $('#a')
.)
Answered 2023-09-20 20:34:46
b
and c
are dynamically added, and you only want to select the element if it has those classes. - anyone .a .b
searches for elements with class b
that are descendants of an element with class a
. So something like div a
will only return a
elements that are inside a div
element. - anyone You can do this using the filter()
function:
$(".a").filter(".b")
Answered 2023-09-20 20:34:46
For the case
<element class="a">
<element class="b c">
</element>
</element>
You would need to put a space in between .a
and .b.c
$('.a .b.c')
Answered 2023-09-20 20:34:46
The problem you're having, is that you are using a Group Selector
, whereas you should be using a Multiples selector
! To be more specific, you're using $('.a, .b')
whereas you should be using $('.a.b')
.
For more information, see the overview of the different ways to combine selectors herebelow!
Select all <h1>
elements AND all <p>
elements AND all <a>
elements :
$('h1, p, a')
Select all <input>
elements of type
text
, with classes code
and red
:
$('input[type="text"].code.red')
Select all <i>
elements inside <p>
elements:
$('p i')
Select all <ul>
elements that are immediate children of a <li>
element:
$('li > ul')
Select all <a>
elements that are placed immediately after <h2>
elements:
$('h2 + a')
Select all <span>
elements that are siblings of <div>
elements:
$('div ~ span')
Answered 2023-09-20 20:34:46
$('.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>
Answered 2023-09-20 20:34:46
Just mention another case with element:
E.g. <div id="title1" class="A B C">
Just type: $("div#title1.A.B.C")
Answered 2023-09-20 20:34:46
For better performance you can use
$('div.a.b')
This will look only through the div elements instead of stepping through all the html elements that you have on your page.
Answered 2023-09-20 20:34:46
your code $(".a, .b")
will work for below multiple elements (at a same time)
<element class="a">
<element class="b">
if you want to select element having a and b both class like <element class="a b">
than use js without comma
$('.a.b')
Answered 2023-09-20 20:34:46
Group Selector
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;}
Becomes this:
body, th, td {font-size: 12px; font-family: arial, helvetica, sans-serif;}
So in your case you have tried the group selector whereas its an intersection
$(".a, .b")
instead use this
$(".a.b")
Answered 2023-09-20 20:34:46
You do not need jQuery
for this
In Vanilla
you can do :
document.querySelectorAll('.a.b')
Answered 2023-09-20 20:34:46
Below example will give you idea about to select at a time multiple nested class selectors and direct class selectors in one line
//Here is Explaination of Selectors
//.a .b .c = selects nested child c which is inside of div a and b
//.a .d = selects nested child d which is inside of div a
//.f = selects direct element ie div f which is outside of div a and b
$('.a .b .c , .a .d, .f').css('background-color', 'grey');
<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 class="c">c</div>
</div>
<div class="d">d</div>
</div>
<div class="e">e</div>
<div class="f">f</div>
Answered 2023-09-20 20:34:46
You can use getElementsByClassName()
method for what you want.
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>
This is the fastest solution also. you can see a benchmark about that here.
Answered 2023-09-20 20:34:46