Xác định xem một phần tử có lớp CSS với jQuery không


173

Tôi đang làm việc với jQuery và đang tìm xem có cách nào dễ dàng để xác định xem phần tử đó có một lớp CSS cụ thể được liên kết với nó không.

Tôi có id của phần tử và lớp CSS mà tôi đang tìm kiếm. Tôi chỉ cần có thể, trong một câu lệnh if, thực hiện một phép so sánh dựa trên sự tồn tại của lớp đó trên phần tử.


1
Nếu bạn muốn làm điều đó mà không cần jQuery, thì có haslass Class với javascript không?
Oriol

Câu trả lời:


237

Sử dụng hasClassphương pháp:

jQueryCollection.hasClass(className);

hoặc là

$(selector).hasClass(className);

Đối số là (rõ ràng) một chuỗi đại diện cho lớp bạn đang kiểm tra và nó trả về một boolean (vì vậy nó không hỗ trợ chuỗi như hầu hết các phương thức jQuery).

Lưu ý: Nếu bạn vượt qua một classNameđối số có khoảng trắng, nó sẽ được khớp theo nghĩa đen với classNamechuỗi các phần tử của bộ sưu tập . Vì vậy, nếu, ví dụ, bạn có một yếu tố,

<span class="foo bar" />

sau đó điều này sẽ trở lại true:

$('span').hasClass('foo bar')

và những thứ này sẽ trở lại false:

$('span').hasClass('bar foo')
$('span').hasClass('foo  bar')

4
Tôi không đồng ý. Tài liệu được sắp xếp theo các danh mục, nhưng bạn cũng có thể dễ dàng thấy tất cả các phương pháp theo thứ tự bảng chữ cái. Mọi thứ đều đi kèm với một ví dụ và phần bình luận thường sẽ dọn sạch mọi thứ còn sót lại. jQuery có rất nhiều chức năng và tiện ích tuyệt vời và phải học hỏi để khám phá tất cả. -EDIT- Điều đó có ý nghĩa, nó chắc chắn sẽ đi một chặng đường dài.
Trafalmadorian

1
@Trafalmadorian, tôi đã xóa nhận xét ban đầu của mình vì tình hình đã thay đổi. Ban đầu bạn đã đăng tất cả mọi thứ trước đó -EDIT- và tôi đã trả lời rằng nhận xét của tôi về chất lượng tài liệu không còn phù hợp nữa mà được đề cập đến hệ thống (MediaWiki) trước đây của họ. Sau đó, bạn đã xóa nhận xét trước đó của mình và lặp lại với -EDIT-. Tôi hy vọng rằng việc dọn dẹp này rõ ràng hơn và ít gây hiểu lầm hơn cho các độc giả tương lai.
mí mắt

@daniloquio, đó là nếu bạn đi trực tiếp vào api.jquery.com ... vì một lý do trang web vẫn còn liên kết với các phiên bản wiki khủng khiếp tại docs.jquery.com
eyelidlessness

21

từ FAQ

elem = $("#elemid");
if (elem.is (".class")) {
   // whatever
}

hoặc là:

elem = $("#elemid");
if (elem.hasClass ("class")) {
   // whatever
}

3
cẩn thận với .là () - "Phương pháp là () trong jQuery trả về true nếu bất kỳ của các yếu tố trong trận đấu bộ sưu tập hiện tại bất kỳ của các yếu tố trong bộ sưu tập là dựa trên" - bennadel.com/blog/...
Zack

11

Về phần phủ định, nếu bạn muốn biết nếu một phần tử không có lớp, bạn có thể chỉ cần làm như Mark đã nói.

if (!currentPage.parent().hasClass('home')) { do what you want }

3

Không có jQuery:

var hasclass=!!(' '+elem.className+' ').indexOf(' check_class ')+1;

Hoặc là:

function hasClass(e,c){
    return e&&(e instanceof HTMLElement)&&!!((' '+e.className+' ').indexOf(' '+c+' ')+1);
}
/*example of usage*/
var has_class_medium=hasClass(document.getElementsByTagName('input')[0],'medium');

Đây là CÁCH nhanh hơn jQuery!


Tại sao bạn làm ...&&!!((' '+e.classname+' ').indexOf(' '+c+' ')+1), và không chỉ &&!(' '+e.classname+' ').indexOf(' '+c+' ')?
Blexy

1
Bởi vì indexOftrả về -1là lớp không tồn tại. Nếu tôi làm !!-1, nó sẽ được true. Vì tôi đang làm !!-1+1, nó sẽ sai. Một cách tốt hơn sẽ là ...&&!!~(' '+e.className+' ').indexOf(' '+c+' '), nhưng tôi đã không nhớ nó vào thời điểm đó.
Ismael Miguel

Xin lỗi, ý tôi là...&&~(' '+e.className+' ').indexOf(' '+c+' ')
Ismael Miguel

3

Để giúp bất cứ ai đến đây nhưng thực sự đang tìm kiếm một cách miễn phí của jQuery để làm điều này:

element.classList.contains('your-class-name')


0
 $('.segment-name').click(function () {
    if($(this).hasClass('segment-a')){
        //class exist
    }
});

0

Trong trường hợp của tôi, tôi đã sử dụng hàm 'là' một hàm jQuery, tôi đã có một phần tử HTML với các lớp css khác nhau được thêm vào, tôi đang tìm một lớp cụ thể ở giữa chúng, vì vậy tôi đã sử dụng "là" một cách thay thế tốt để kiểm tra một lớp được thêm động vào một phần tử html, vốn đã có các lớp css khác, nó là một lựa chọn tốt khác.

ví dụ đơn giản:

 <!--element html-->
 <nav class="cbp-spmenu cbp-spmenu-horizontal cbp-spmenu-bottom cbp-spmenu-open" id="menu">somethings here... </nav>

 <!--jQuery "is"-->
 $('#menu').is('.cbp-spmenu-open');

ví dụ nâng cao:

 <!--element html-->
    <nav class="cbp-spmenu cbp-spmenu-horizontal cbp-spmenu-bottom cbp-spmenu-open" id="menu">somethings here... </nav>

   <!--jQuery "is"-->
    if($('#menu').is('.cbp-spmenu-bottom.cbp-spmenu-open')){
       $("#menu").show();
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.