jquery nếu div id có con


202

Điều kiện này iflà điều khiến tôi gặp rắc rối:

if (div id=myfav has children) {
   do something
} else {
   do something else 
}

Tôi đã thử tất cả những điều sau đây:

if ( $('#myfav:hasChildren') ) { do something }
if ( $('#myfav').children() ) { do something }
if ( $('#myfav:empty') ) { do something }
if ( $('#myfav:not(:has(*))') ) { do something }

Câu trả lời:


440
if ( $('#myfav').children().length > 0 ) {
     // do something
}

Điều này nên làm việc. Các children()hàm trả về một đối tượng JQuery có chứa các trẻ em. Vì vậy, bạn chỉ cần kiểm tra kích thước và xem nếu nó có ít nhất một con.


1
Cảm ơn câu trả lời. Đây là những gì làm việc cho tôi. Tôi biết tôi đã đi đúng hướng với .children (), nhưng không biết điều gì đã xảy ra với nó. Rõ ràng kích thước có thể là 0, có ý nghĩa.
Chris

2
Nếu bạn thêm một bộ chọn cho trẻ em, bạn cũng có thể kiểm tra xem một phần tử có con phù hợp với một bộ chọn cụ thể không, như nếu bạn muốn xem một phần tử có con của một lớp cụ thể không.
Muhd

11
vấn đề nhỏ. không có nghĩa là nitpick nhưng children().lengthnên được gọi thay vì kích thước () cho mỗi tài liệu jQuery ở đây: api.jquery.com/size
Brian Chavez

4
Và nếu nút chỉ chứa văn bản thì sao!?
botenvouwer

1
@sirwilliam Nút sẽ trở về với độ dài 0.
Meki

54

Đoạn mã này sẽ xác định xem phần tử có con bằng cách sử dụng :parentbộ chọn không:

if ($('#myfav').is(':parent')) {
    // do something
}

Lưu ý rằng :parentcũng coi một phần tử có một hoặc nhiều nút văn bản là cha.

Do đó, các divyếu tố trong <div>some text</div><div><span>some text</span></div>sẽ được coi là cha mẹ nhưng <div></div>không phải là cha mẹ.


2
Vâng, tôi nghĩ rằng câu trả lời này thanh lịch hơn S Pangborn. Cả hai đều hoàn toàn hợp pháp mặc dù.
KyleFarris

1
@Milo LaMar, tôi nghi ngờ không có nhiều sự khác biệt về hiệu suất, nhưng cách duy nhất để chắc chắn là thử nó! Ngoài ra, bạn phải xóa khoảng trắng giữa #myfav:parenttrong ví dụ của mình, nếu không, bộ chọn không giống với câu trả lời của tôi sẽ cung cấp.
draples

3
Một lượng rất nhỏ đọc đã trả lời đủ cho tôi. Lấy từ api.jquery.com/parent-selector Additional Notes: Because :parent is a jQuery extension and not part of the CSS specification, queries using :parent cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. To achieve the best performance when using :parent to select elements, first select the elements using a pure CSS selector, then use .filter(":parent").
Milo LaMar

6
kết quả kiểm tra hiệu suất trong 0,002 giây - tôi thích cách này hơn, bởi vì nó dễ đọc nhất ...
dtrunk

1
Tôi bối rối, đây không phải là câu trả lời tốt nhất?
Andrei Cristian Prodan

47

Một lựa chọn khác, chỉ vì cái quái gì đó sẽ là:

if ( $('#myFav > *').length > 0 ) {
     // do something
}

Có thể thực sự là nhanh nhất vì nó sử dụng nghiêm ngặt công cụ Sizzle và không nhất thiết phải là bất kỳ jQuery nào. Có thể sai mặc dù. Tuy nhiên, nó hoạt động.


16

Thực sự có một phương pháp riêng đơn giản cho việc này:

if( $('#myfav')[0].hasChildNodes() ) { ... }

Lưu ý rằng điều này cũng bao gồm các nút văn bản đơn giản, vì vậy nó sẽ đúng với a <div>text</div>.


$(...)[0] is undefinedĐiều này có thể xảy ra nếu #myfavkhông được tìm thấy. Tôi sẽ kiểm tra sự tồn tại của phần tử phù hợp đầu tiên trước khi áp dụng điều kiện đó, nghĩa là : $('#myfav')[0] && $('#myfav')[0].hasChildNodes().
CPHPython

13

và nếu bạn muốn kiểm tra div có con vuông góc không (nói <p>sử dụng:

if ($('#myfav').children('p').length > 0) {
     // do something
}

7

Bạn cũng có thể kiểm tra xem div có con cụ thể hay không,

if($('#myDiv').has('select').length>0)
{
   // Do something here.
   console.log("you can log here");

}

4

Cách jQuery

Trong jQuery, bạn có thể sử dụng $('#id').children().length > 0để kiểm tra xem một phần tử có con hay không.

Bản giới thiệu

var test1 = $('#test');
var test2 = $('#test2');

if(test1.children().length > 0) {
    test1.addClass('success');
} else {
    test1.addClass('failure');
}

if(test2.children().length > 0) {
    test2.addClass('success');
} else {
    test2.addClass('failure');
}
.success {
    background: #9f9;
}

.failure {
    background: #f99;
}
<script src="https://code.jquery.com/jquery-1.12.2.min.js"></script>
<div id="test">
   <span>Children</span>
</div>
<div id="test2">
   No children
</div>


Cách vanilla JS

Nếu bạn không muốn sử dụng jQuery, bạn có thể sử dụng document.getElementById('id').children.length > 0để kiểm tra xem một phần tử có con hay không.

Bản giới thiệu

var test1 = document.getElementById('test');
var test2 = document.getElementById('test2');

if(test1.children.length > 0) {
    test1.classList.add('success');
} else {
    test1.classList.add('failure');
}

if(test2.children.length > 0) {
    test2.classList.add('success');
} else {
    test2.classList.add('failure');
}
.success {
    background: #9f9;
}

.failure {
    background: #f99;
}
<div id="test">
   <span>Children</span>
</div>
<div id="test2">
   No children
</div>

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.