Как я могу выбрать элемент с несколькими классами в jQuery?

Я хочу выбрать все элементы, которые имеют два класса a и b.

<element class="a b">

Итак, только элементы, имеющие оба класса.

Когда я использую $(".a, .b"), это дает мне объединение, но я хочу пересечение.


person Mladen    schedule 24.06.2009    source источник
comment
Было бы неплохо, если бы вы могли определить, что для нас, новичков, означает объединение и пересечение :)   -  person Kellen Stuart    schedule 13.04.2016
comment
@KolobCanyon объединение и пересечение являются основными концепциями теории множеств. Так, например, профсоюз будет состоять из всех франкоговорящих (включая мужчин и женщин), тогда как пересечение будет состоять из всех женщин, говорящих по-французски (исключает всех, кто не говорит по-французски, и исключает всех людей, не являющихся женщинами). Союзы и пересечения могут быть выполнены с любым количеством характеристик, определяющих каждый набор. en.wikipedia.org/wiki/Union_(set_theory) en.wikipedia.org/wiki/Intersection_ (set_theory)   -  person Katharine Osborne    schedule 25.07.2016
comment
Я думаю, вы имеете в виду, что из двух групп, женщин и франкоговорящих, в союз будут входить все женщины в мире и все франкоговорящие в мире, группа, в которую входят как женщины, не говорящие по-французски, так и французские. говорящие мужчины. Перекресток - это, как вы писали, только те женщины, которые говорят по-французски.   -  person Teemu Leisti    schedule 08.09.2016


Ответы (13)


Если вы хотите сопоставить только элементы с обоими классами (пересечение, например, логическое И), просто запишите селекторы вместе без пробелов между ними:

$('.a.b')

Порядок не имеет значения, поэтому вы также можете поменять классы местами:

$('.b.a')

Итак, чтобы сопоставить элемент div с идентификатором a с классами b и c, вы должны написать:

$('div#a.b.c')

(На практике вам, скорее всего, не нужно указывать это конкретное, и обычно достаточно одного идентификатора или селектора класса: $('#a').)

person Sasha Chedygov    schedule 24.06.2009
comment
@Flater: Это было просто для примера. Но может быть полезно, если классы b и c добавляются динамически, и вы хотите выбрать элемент только в том случае, если он имеет эти классы. - person Sasha Chedygov; 07.08.2012
comment
@ Шимми: Да. Пробел между двумя селекторами означает, что вы ищете потомков; т.е. .a .b ищет элементы с классом b, которые являются потомками элемента с классом a. Таким образом, что-то вроде div a вернет только a элементов, которые внутри элемента div. - person Sasha Chedygov; 13.05.2013

Это можно сделать с помощью функции filter():

$(".a").filter(".b")
person Jamie Love    schedule 24.06.2009
comment
Чем отличается этот ответ от принятого? - person Vivian River; 09.08.2011
comment
@Rice: Этот будет немного медленнее, потому что он сначала создаст список объектов с классом a, а затем удалит все, кроме тех, которые имеют класс b, тогда как мой делает это за один шаг. Но в остальном без разницы. - person Sasha Chedygov; 08.09.2011

По делу

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

Вам нужно будет поставить пробел между .a и .b.c

$('.a .b.c')
person juanpaulo    schedule 25.03.2013

Проблема в том, что вы используете Group Selector, тогда как вам следует использовать Multiples selector! Чтобы быть более конкретным, вы используете $('.a, .b'), тогда как вы должны использовать $('.a.b').

Для получения дополнительной информации см. Обзор различных способов комбинирования селекторов ниже!


Селектор группы: ","

Выберите все <h1> элементы И все <p> элементы И все <a> элементы:

$('h1, p, a')

Селектор множителей: "" (без символа)

Выберите все <input> элементы type text с классами code и red:

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

Селектор потомков: "" (пробел)

Выделите все <i> элементов внутри <p> элементов:

$('p i')

Дочерний селектор: ">"

Выберите все <ul> элементы, которые являются непосредственными дочерними элементами <li> элемента:

$('li > ul')

Селектор смежных братьев и сестер: "+"

Выберите все <a> элементы, которые помещаются сразу после <h2> элементов:

$('h2 + a')

Общий селектор братьев и сестер: "~"

Выберите все <span> элементы, которые являются родственниками <div> элементов:

$('div ~ span')
person John Slegers    schedule 20.01.2016

Упомяните еще один случай с element:

E.g. <div id="title1" class="A B C">

Просто введите: $("div#title1.A.B.C")

person macio.Jun    schedule 14.12.2012

Решение Vanilla JavaScript: -

document.querySelectorAll('.a.b')

person Salman von Abbas    schedule 29.01.2015

Для лучшей производительности вы можете использовать

$('div.a.b')

Это будет просматривать только элементы div, а не пошагово просматривать все элементы html, которые есть на вашей странице.

person Tejas Shah    schedule 28.09.2015

Селектор группы

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") 
person Surya R Praveen    schedule 17.05.2017

ваш код $(".a, .b") будет работать для нескольких элементов ниже (одновременно)

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

если вы хотите выбрать элемент, имеющий a и b, оба класса, такие как <element class="a b">, чем использовать js без комы

$('.a.b')
person Savan    schedule 10.10.2019

Для этого вам не нужен jQuery

В Vanilla вы можете:

document.querySelectorAll('.a.b')
person Sandwell    schedule 04.04.2018

Вы можете использовать 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>

Это также самое быстрое решение. вы можете увидеть тест этого здесь.

person bahman parsamanesh    schedule 01.08.2018

var elem = document.querySelector (". a.b");

person Karim Ali    schedule 04.10.2019

Пример ниже даст вам представление о выборе одновременно нескольких вложенных селекторов классов и прямых селекторов классов в одной строке.

//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>

person Gauri Bhosle    schedule 02.05.2021