Я хочу вибрати всі елементи, які мають два класи 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')
(На практиці вам, швидше за все, не потрібно розбиратись у цьому конкретному стилі, і самий селектор ID або класу зазвичай достатній:. $('#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>
Ванільне рішення JavaScript: -
document.querySelectorAll('.a.b')
Вибір групи
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>
Це також найшвидше рішення. ви можете побачити орієнтир про це тут .