Tôi muốn chọn tất cả các phần tử có hai lớp a
và b
.
<element class="a b">
Vì vậy, chỉ các yếu tố có cả hai lớp.
Khi tôi sử dụng $(".a, .b")
nó mang lại cho tôi sự kết hợp, nhưng tôi muốn giao lộ.
Tôi muốn chọn tất cả các phần tử có hai lớp a
và b
.
<element class="a b">
Vì vậy, chỉ các yếu tố có cả hai lớp.
Khi tôi sử dụng $(".a, .b")
nó mang lại cho tôi sự kết hợp, nhưng tôi muốn giao lộ.
Câu trả lời:
Nếu bạn muốn chỉ khớp các phần tử với cả hai lớp (một giao điểm, như logic AND), chỉ cần viết các bộ chọn với nhau mà không có khoảng trắng ở giữa:
$('.a.b')
Thứ tự không liên quan, vì vậy bạn cũng có thể trao đổi các lớp:
$('.b.a')
Vì vậy, để khớp với một div
phần tử có ID của a
các lớp b
và c
, bạn sẽ viết:
$('div#a.b.c')
(Trong thực tế, rất có thể bạn không cần phải có được cụ thể đó và bản thân một bộ chọn ID hoặc lớp thường là đủ : $('#a')
.)
b
và c
được thêm động, và bạn chỉ muốn chọn phần tử nếu nó có các lớp đó.
.a .b
tìm kiếm các phần tử với lớp b
là hậu duệ của một phần tử với lớp a
. Vì vậy, một cái gì đó như div a
sẽ chỉ trả lại a
các yếu tố bên trong một div
yếu tố.
Bạn có thể làm điều này bằng cách sử dụng filter()
chức năng:
$(".a").filter(".b")
.a
và cần lọc nhiều lần dựa trên các lớp tùy ý khác nhau cũng thuộc về bộ ban đầu .a
.
Đối với trường hợp
<element class="a">
<element class="b c">
</element>
</element>
Bạn sẽ cần đặt một khoảng trống ở giữa .a
và.b.c
$('.a .b.c')
$('.a .c.b')
cũng sẽ hoạt động chứ?
$('.a > element')
Vấn đề bạn gặp phải là bạn đang sử dụng a Group Selector
, trong khi bạn nên sử dụng a Multiples selector
! Để cụ thể hơn, bạn đang sử dụng $('.a, .b')
trong khi bạn nên sử dụng $('.a.b')
.
Để biết thêm thông tin, hãy xem tổng quan về các cách khác nhau để kết hợp các công cụ chọn herebelow!
Chọn tất cả các <h1>
yếu tố VÀ tất cả các <p>
yếu tố VÀ tất cả các <a>
yếu tố:
$('h1, p, a')
Chọn tất cả các <input>
thành phần của type
text
, với các lớp code
và red
:
$('input[type="text"].code.red')
Chọn tất cả các <i>
yếu tố bên trong <p>
các yếu tố:
$('p i')
Chọn tất cả các <ul>
phần tử là con ngay lập tức của một <li>
phần tử:
$('li > ul')
Chọn tất cả các <a>
yếu tố được đặt ngay sau <h2>
các yếu tố:
$('h2 + a')
Chọn tất cả các <span>
yếu tố là anh em ruột của <div>
các yếu tố:
$('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>
Giải pháp Vanilla JavaScript: -
document.querySelectorAll('.a.b')
Để có hiệu suất tốt hơn, bạn có thể sử dụng
$('div.a.b')
Điều này sẽ chỉ xem qua các phần tử div thay vì bước qua tất cả các phần tử html mà bạn có trên trang của mình.
Chọn nhóm
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;}
Trở thành này:
body, th, td {font-size: 12px; font-family: arial, helvetica, sans-serif;}
Vì vậy, trong trường hợp của bạn, bạn đã thử bộ chọn nhóm trong khi đó là giao điểm
$(".a, .b")
thay vì sử dụng cái này
$(".a.b")
Bạn có thể sử dụng getElementsByClassName()
phương pháp cho những gì bạn muốn.
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>
Đây là giải pháp nhanh nhất cũng có. bạn có thể thấy một tiêu chuẩn về điều đó ở đây .