jQuery: Kiểm tra xem div có tên lớp nhất định tồn tại không


235

Sử dụng jQuery Tôi lập trình tạo ra một loạt các divnhư thế này:

<div class="mydivclass" id="myid1">Some Text1</div>
<div class="mydivclass" id="myid2">Some Text2</div>

Ở đâu đó trong mã của tôi, tôi cần phát hiện nếu các DIV này tồn tại. Tên lớp cho div là giống nhau nhưng ID thay đổi cho mỗi div. Bất kỳ ý tưởng làm thế nào để phát hiện chúng bằng jQuery?

Câu trả lời:


424

Bạn có thể đơn giản hóa điều này bằng cách kiểm tra đối tượng đầu tiên được trả về từ JQuery như sau:

if ($(".mydivclass")[0]){
    // Do something if class exists
} else {
    // Do something if class does not exist
}

Trong trường hợp này nếu có một giá trị trung thực lúc đầu ([0] chỉ mục ), thì giả sử lớp tồn tại.

Chỉnh sửa 04/10/2013: Tôi đã tạo một trường hợp thử nghiệm jsperf tại đây .


Điểm tốt, dù bằng cách nào, nó chỉ là một tra cứu tài sản. Tôi không quan tâm đến bốn nhân vật, nhưng điều này có thể rõ ràng hơn tùy thuộc vào bối cảnh ...
TJ Crowder

Tôi đã kết thúc sử dụng giải pháp này mặc dù có những giải pháp khác cũng hoạt động. Cảm ơn bạn đã trả lời nhanh chóng.
avatar

1
Thật thú vị, bạn có thể nghĩ rằng ném :firstvào đó sẽ giúp hiệu suất (không biết hiệu suất có phải là một tiêu chí quan trọng đối với @itgorilla hay không), nhưng liệu nó có thay đổi dữ dội bởi trình duyệt hay không, có lẽ vì nó thay đổi các tính năng gốc mà jQuery có thể sử dụng để thực hiện lựa chọn. Đây là một trường hợp thử nghiệm trong đó div tồn tạiđây là một trường hợp không tồn tại .
TJ Crowder

Và nếu tôi không thực thi mã nếu một lớp không tồn tại?
Thomas Sebastian

1
@ThomasSebastian Hãy thửif (!$(".mydivclass")[0]){ /* do stuff */ }
Shaz

117

Bạn có thể sử dụng size(), nhưng jQuery khuyên bạn nên sử dụng độ dài để tránh chi phí của một lệnh gọi hàm khác:

$('div.mydivclass').length

Vì thế:

// since length is zero, it evaluates to false
if ($('div.mydivclass').length) {

http://api.jquery.com/size/

http://api.jquery.com/length/

CẬP NHẬT

Câu trả lời được chọn sử dụng một bài kiểm tra hoàn hảo, nhưng nó hơi thiếu sót vì nó cũng bao gồm lựa chọn phần tử như một phần của sự hoàn hảo, không phải là điều đang được thử nghiệm ở đây. Đây là một bài kiểm tra hoàn hảo cập nhật:

http://jsperf.com/check-if-div-exists/3

Lần thử nghiệm đầu tiên của tôi cho thấy việc truy xuất thuộc tính nhanh hơn truy xuất chỉ mục, mặc dù IMO nó không đáng kể. Tôi vẫn thích sử dụng độ dài đối với tôi, nó có ý nghĩa hơn đối với mục đích của mã thay vì điều kiện ngắn gọn hơn.


3
Theo liên kết bạn cung cấp cho công cụ trên jsperf.com, .lengthhiện cung cấp hiệu suất trung bình tốt nhất.
gmeben

Phục vụ nhu cầu của tôi với tác động hiệu suất nhỏ nhất để kiểm tra.
David O'Regan

77

Không có jQuery:

JavaScript nguyên bản sẽ luôn nhanh hơn. Trong trường hợp này: (ví dụ)

if (document.querySelector('.mydivclass') !== null) {
    // .. it exists
}

Nếu bạn muốn kiểm tra xem phần tử cha có chứa phần tử khác với một lớp cụ thể không, bạn có thể sử dụng một trong các cách sau. (thí dụ)

var parent = document.querySelector('.parent');

if (parent.querySelector('.child') !== null) {
    // .. it exists as a child
}

Ngoài ra, bạn có thể sử dụng .contains()phương thức trên phần tử cha. (thí dụ)

var parent = document.querySelector('.parent'),
    child = document.querySelector('.child');

if (parent.contains(child)) {
    // .. it exists as a child
}

.. và cuối cùng, nếu bạn muốn kiểm tra xem liệu một phần tử đã cho chỉ chứa một lớp nhất định, hãy sử dụng:

if (el.classList.contains(className)) {
    // .. el contains the class
}

57
$('div').hasClass('mydivclass')// Returns true if the class exist.

3
Đúng đây là một sự thay thế, nhưng một cái đắt tiền. Sẽ chậm hơn so với cách tiếp cận được sử dụng trong các câu trả lời trước đó ( chậm hơn rõ rệt , trên một số trình duyệt) và cũng có tác động bộ nhớ lớn hơn nhiều (jQuery phải xây dựng một mảng của tất cả các divyếu tố trên trang, sau đó quay lại và lặp qua chúng để xem liệu chúng có lớp đó không, tất cả để loại bỏ mảng ở cuối).
TJ Crowder

3
@tj hasClassnhanh hơn 33% sau đó các công cụ chọn khác ở đây. Kiểm tra jsperf.com/hasgroup00
Hussein

1
@Hussein: Chỉ với một trường hợp thử nghiệm hoàn toàn phi thực tế (hai divyếu tố) mà bên cạnh đó là vấn đề tôi đã nhấn mạnh (xây dựng mảng). Hãy dùng thử với một loạt các div: jsperf.com/hasgroup00/2 Nó chậm hơn 63% trên bản sao Chrome của tôi, chậm hơn 43% trên bản sao Firefox của tôi, chậm hơn 98% (!) Trên Opera. Nhưng hơn nữa, điều hợp là việc xây dựng một danh sách các div và sau đó tìm kiếm nó sẽ chậm hơn, thay vì cung cấp cho công cụ chọn tất cả thông tin cần thiết.
TJ Crowder

1
@Hussein: Lưu ý rằng tôi đã rất thuận tay và đưa ra bằng chứng phản đối cân bằng cho khiếu nại của bạn. Tôi xin lỗi nếu tôi chạm vào một dây thần kinh, điều đó dường như cũng xảy ra lần trước. Hãy thư giãn, đó không phải là chuyện cá nhân, đó là một cuộc thảo luận kỹ thuật. Một làn da dày và một tâm hồn cởi mở rất hữu ích trên StackOverflow.
TJ Crowder

1
@Hussein: Bộ chọn css HTML5 có nghĩa là điều này gần như chắc chắn sẽ luôn là cách tồi tệ nhất có thể để làm điều này. -1 không chỉ đơn giản là xóa bài viết của bạn.
Stefan Kendall

46

Đây là một giải pháp mà không cần sử dụng Jquery

var hasClass = element.classList.contains('class name to search');
// hasClass is boolean
if(hasClass === true)
{
     // Class exists
}

liên kết tham khảo


1
classList chỉ được hỗ trợ trong IE10 +: caniuse.com/ classlist . Bạn phải thêm một github.com/eligrey/ classList.js hoặc viết các phương thức của riêng bạn
AFD


10

Để kiểm tra các divyếu tố rõ ràng:

if( $('div.mydivclass').length ){...}


Điều này có thể chậm hơn một chút so với .mydivclasstùy thuộc vào trình duyệt và phiên bản jQuery.
Stefan Kendall

Đúng, nhưng OP đã nói cụ thể "jQuery - kiểm tra xem div có tên lớp nhất định tồn tại không " (nhấn mạnh của tôi), vì vậy bạn nhận được phiếu bầu của tôi vì là người đầu tiên thực sự bao gồm divmột phần của bộ chọn.
TJ Crowder

7

Mã đơn giản được đưa ra dưới đây:

if ($('.mydivclass').length > 0) {
   //Things to do if class exist
}

Để ẩn div với id particuler:

if ($('#'+given_id+'.mydivclass').length > 0) {
   //Things to do if class exist
}

3

Đây là một số cách:

1.  if($("div").hasClass("mydivclass")){
    //Your code

    //It returns true if any div has 'mydivclass' name. It is a based on the class name
    }

2. if($("#myid1").hasClass("mydivclass")){
    //Your code


    //  It returns true if specific div(myid1) has this class "mydivclass" name. 
    //  It is a  based on the specific div id's.
    }           
3. if($("div[class='mydivclass']").length > 0){
    //Your code

   // It returns all the divs whose class name is "mydivclass"
   //  and it's length would be greater than one.
    }

Chúng tôi có thể sử dụng bất kỳ một trong những cách xác định abobe dựa trên yêu cầu.


2
if ($(".mydivclass").size()){
   // code here
}

Các size()phương pháp chỉ trả về số yếu tố mà sẽ chọn selector jQuery - trong trường hợp này số phần tử với lớp mydivclass. Nếu nó trả về 0, biểu thức là sai và do đó không có giá trị nào và nếu nó trả về bất kỳ số nào khác, các div phải tồn tại.


1
Tại sao gọi một phương thức khi có lengthtài sản? Ngoài ra, điều này kiểm tra bất kỳ phần tử nào với lớp đó, không chỉ a div. (Bây giờ, đó có thể là ý nghĩa của OP, ngay cả khi không phải những gì anh ấy / cô ấy nói.) Xem câu trả lời của Stefan Kendall, điều mà OP thực sự đã nói (mặc dù, một lần nữa, chúng có thể có nghĩa là những gì bạn đã làm).
TJ Crowder

1
@TJ Crowder: Vâng, sở thích cá nhân thực sự - Tôi chỉ cảm thấy phương thức size () là có - tại sao không sử dụng nó. Chi phí hoạt động thêm trong việc gọi một hàm (trừ khi bạn thực hiện 1000 lần trong một vòng lặp) là rất nhỏ, tôi muốn tìm hiểu thêm về mã rõ ràng. Về điểm thứ hai của bạn - có, tôi đã thay đổi câu trả lời ban đầu của mình để xóa divphần đó, vì hai lý do: 1) bộ chọn không bị ràng buộc với thực tế là OP sử dụng một divyếu tố (nó có thể thay đổi trong tương lai) và 2) trong hầu hết các trình duyệt và phiên bản của jQuery, AFAIK, điều này sẽ nhanh hơn.
Herman Schaaf

"Tôi chỉ cảm thấy phương thức size () ở đó - tại sao không sử dụng nó" Ừm, được thôi. Tài lengthsản là có, tại sao không sử dụng nó? Nhưng nếu đó là sở thích của bạn, công bằng. Mặt khác, tôi không biết bạn đã chỉnh sửa nó. Nếu tôi định làm điều đó, tôi sẽ để nó lại (một lần nữa, anh ấy đặc biệt nói "... nếu div với ..." (nhấn mạnh của tôi) và sau đó đề cập thêm rằng nếu nó không thành vấn đề là một divhay không, bạn có thể bỏ phần đó. Nhưng dù gì đi nữa :-)
TJ Crowder

@TJ Crowder: Vâng, tôi nghĩ chúng ta đang xem xét lại điều này.
Herman Schaaf

@TJ Crowder: Nhưng để bảo vệ tôi, mặc dù đây không phải là nơi để thảo luận: Tôi cảm thấy size()phương pháp ở đó để làm rõ rằng bạn đang đếm số lượng phần tử trong bộ chọn jQuery chứ không phải bất kỳ mảng cũ nào. Nhưng một lần nữa, đó chỉ là sở thích của tôi.
Herman Schaaf

2

kiểm tra xem div có tồn tại với một lớp nhất định không

if ($(".mydivclass").length > 0) //it exists 
{

}

2
if($(".myClass")[0] != undefined){
  // it exists
}else{
  // does not exist
}

2
Có vẻ gần giống với câu trả lời hiện có này .
Pang

Vâng, đúng vậy ... nhưng tôi đã thử câu trả lời đó và nó không hoạt động. Khi tôi thêm so sánh vào 'không xác định', nó dường như hoạt động hoàn hảo.
thang

2
var x = document.getElementsByClassName("class name");
if (x[0]) {
alert('has');
} else {
alert('no has');
}

Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung về lý do và / hoặc cách mã này trả lời câu hỏi cải thiện giá trị lâu dài của nó.
Vishal Chhodwani

2

Trong Jquery bạn có thể sử dụng như thế này.

if ($(".className")[0]){

   // Do something if class exists

} else {

// Do something if class does not exist

}

Với JavaScript

if (document.getElementsByClassName("className").length > 0) {

// Do something if class exists

}else{

    // Do something if class does not exist

}

2

Đây là giải pháp rất mẫu cho lớp kiểm tra (hasClass) trong Javascript:

const mydivclass = document.querySelector('.mydivclass');
// if 'hasClass' is exist on 'mydivclass'
if(mydivclass.classList.contains('hasClass')) {
   // do something if 'hasClass' is exist.
}

1

Cách tốt nhất trong Javascript:

if (document.getElementsByClassName("search-box").length > 0) {
// do something
}

1

if ($ ("# myid1"). hasClass ("mydiv class")) {// Làm bất cứ điều gì}


Vui lòng đưa ra một số lời giải thích cho câu trả lời của bạn
thực thi

0

Sử dụng để tìm kiếm toàn bộ trang

if($('*').hasClass('mydivclass')){
// Do Stuff
}
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.