Я хочу выбрать все элементы, которые имеют два класса a
и b
.
<element class="a b">
Итак, только те элементы, которые имеют оба класса.
Когда я использую $(".a, .b")
это дает мне союз, но я хочу пересечение.
Я хочу выбрать все элементы, которые имеют два класса a
и b
.
<element class="a b">
Итак, только те элементы, которые имеют оба класса.
Когда я использую $(".a, .b")
это дает мне союз, но я хочу пересечение.
Ответы:
Если вы хотите сопоставить только элементы с обоими классами (пересечение, как логическое И), просто запишите селекторы вместе без пробелов между ними:
$('.a.b')
Порядок не имеет значения, поэтому вы также можете поменять местами классы:
$('.b.a')
Таким образом, чтобы сопоставить div
элемент, имеющий идентификатор a
с классами b
и c
, вы должны написать:
$('div#a.b.c')
(На практике вам, скорее всего, не нужно получать эту конкретную информацию, и обычно достаточно идентификатора или селектора классов:. $('#a')
)
b
и c
добавляются динамически, и вы хотите выбрать элемент, только если у него есть эти классы.
.a .b
ищет элементы с классом, b
которые являются потомками элемента с классом a
. Так что- то вроде div a
будет возвращать только a
элементы, которые в виде div
элемента.
Вы можете сделать это с помощью filter()
функции:
$(".a").filter(".b")
.a
и вам нужно несколько раз фильтровать на основе разных произвольных классов, которые также принадлежат исходному .a
набору.
Для случая
<element class="a">
<element class="b c">
</element>
</element>
Вы должны были бы поставить пробел между .a
и.b.c
$('.a .b.c')
$('.a .c.b')
также будет работать?
$('.a > element')
Проблема в том, что вы используете 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')
$('.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>
Решение Vanilla JavaScript: -
document.querySelectorAll('.a.b')
Для лучшей производительности вы можете использовать
$('div.a.b')
Это будет смотреть только через элементы div вместо того, чтобы переходить через все элементы html, которые есть на вашей странице.
Выбор группы
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")
Вы можете использовать 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>
Это также самое быстрое решение. Вы можете увидеть тест здесь .