Làm thế nào để kiểm tra nếu một phần tử KHÔNG có một lớp cụ thể?


232

Làm cách nào để kiểm tra nếu không có lớp. Ví dụ, tôi biết cách kiểm tra xem nó có lớp "kiểm tra" không, nhưng làm cách nào để kiểm tra xem liệu nó có lớp "kiểm tra" không?

if($(this).hasClass("test")){
}

Câu trả lời:


484
if (!$(this).hasClass("test")) {

34
Trong tĩnh mạch TIMTOWTDI, đây là một giải pháp khủng khiếp: if($(this).is(":not(.test)"))> :)
Phrogz

6
TIMTOWTDIBSCINABTE
Fizzix

25
Trong trường hợp bất cứ ai thắc mắc: Có nhiều cách để làm điều đó, nhưng đôi khi tính nhất quán không phải là một điều xấu.
Thuyền trưởng Hypertext

145

Tất nhiên câu trả lời của sdleihssirhc là câu trả lời đúng cho trường hợp trong câu hỏi, nhưng chỉ là một tài liệu tham khảo nếu bạn cần chọn các phần tử không có một lớp nhất định, bạn có thể sử dụng công cụ không chọn:

// select all divs that don't have class test
$( 'div' ).not( ".test" );
$( 'div:not(.test)' );  // <-- alternative 

8
IMHO câu trả lời của bạn là tốt nhất. Nếu câu trả lời của sdleihssirhc là chính xác hơn câu hỏi này không liên quan gì đến jQuery và sẽ được xây dựng tốt hơn dưới dạng 'đưa ra một số điều kiện, làm cách nào để kiểm tra điều kiện đó KHÔNG đúng trong Javascript'. Những gì chúng ta muốn với jQuery là hoạt động trên toàn bộ bộ sưu tập các phần tử DOM dễ dàng như chúng ta có thể trên các đối tượng đơn lẻ. Câu trả lời của bạn chỉ cung cấp giải pháp đó. +1
Stijn de Witt

1
@byronyasgur Trong bối cảnh của câu hỏi ban đầu, người đăng muốn kiểm tra xem một yếu tố đã biết nào đó không có lớp. Mã này chọn tất cả các phần tử không có lớp, vì vậy nó sẽ không giải quyết được vấn đề của người gửi. Tôi không nhớ tại sao tôi đăng bài này ở nơi đầu tiên.
JJJ

14

Chọn phần tử (hoặc nhóm phần tử) có lớp "abc", không có lớp "xyz":

    $('.abc:not(".xyz")')

Khi chọn CSS thông thường, bạn có thể sử dụng .abc:not(.xyz).


6

sử dụng phương thức .not () và kiểm tra một thuộc tính:

$('p').not('[class]');

Kiểm tra nó ở đây: http://jsfiddle.net/AWb79/


8
Điều này là hoàn toàn sai. Chân đế không dành cho các lớp nhưng được sử dụng cho các bộ chọn xác định các thuộc tính.
Misterparker

1
Thật ra nó hoàn toàn đúng. '[Class]' là xác định chính xác thuộc tính của (không) có một lớp.
Deborah

Các lớp @Misterparker là các thuộc tính.
Matthew Cira

cái này kiểm tra xem thuộc tính có mặt không, không phải là trường hợp nếu một phần tử có một lớp cụ thể, như trong giá trị lớp
Đánh dấu

6

Bạn có thể thử điều này:

<div id="div1" class="myClass">there is a class</div>
<div id="div2"> there is no class2 </div>

$(document).ready(function(){
    $("#div2").not('.myClass');  // do not have `myClass` class.
});

Câu trả lời này không thêm bất kỳ giá trị nào vào trang, nó đã được đăng 7 năm. Xin vui lòng không bao giờ chỉ đăng mã và nội dung trùng lặp.
mickmackusa


0

đọc qua 6yrs này sau đó và nghĩ rằng tôi cũng sẽ hack nó, cũng theo mạch TIMTOWTDI ...: D, hy vọng nó không chính xác 'nghi thức JS'.

Tôi thường thiết lập một var với điều kiện và sau đó tham khảo nó sau..ie;

// var set up globally OR locally depending on your requirements
var hC;

function(el) {
  var $this = el;
  hC = $this.hasClass("test");

  // use the variable in the conditional statement
  if (!hC) {
    //
  }
}

Mặc dù tôi nên đề cập rằng tôi làm điều này bởi vì tôi chủ yếu sử dụng toán tử ternary có điều kiện và muốn mã sạch. Vì vậy, trong trường hợp này, tất cả những gì tôi muốn là:

hC ? '' : foo(x, n) ;
   // OR -----------
!hC ? foo(x, n) : '' ;

... thay vì điều này:

$this.hasClass("test") ? '' : foo(x, n) ;
   // OR -----------
(!$this.hasClass("test")) ? foo(x, n) : '' ;

0

Tôi không biết tại sao, nhưng câu trả lời được chấp nhận đã không làm việc cho tôi. Thay vào đó, nó hoạt động:

if ($(this).hasClass("test") !== false) {}

Điều này thực sự kiểm tra nếu nó KHÔNG có lớp "kiểm tra". Để kiểm tra xem nó KHÔNG có lớp "kiểm tra" hay không, bạn cần phải có "=== false" hoặc "! == true" thay vì "! == false".
Lisa Cerilli
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.