jquery ถ้า div id มีลูก


202

เงื่อนไขนี้ifคือสิ่งที่ทำให้ฉันมีปัญหา:

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

ฉันลองทั้งหมดต่อไปนี้:

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

คำตอบ:


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

สิ่งนี้น่าจะใช้ได้ children()ฟังก์ชั่นส่งกลับวัตถุ JQuery ที่มีเด็ก ดังนั้นคุณต้องตรวจสอบขนาดและดูว่ามีลูกอย่างน้อยหนึ่งคนหรือไม่


1
ขอบคุณสำหรับคำตอบ. นี่คือสิ่งที่ได้ผลสำหรับฉัน ฉันรู้ว่าฉันอยู่ในเส้นทางที่ถูกต้องกับ. เด็ก () แต่ไม่ทราบว่ามีอะไรผิดปกติ เห็นได้ชัดว่าขนาดอาจเป็น 0 ทำให้รู้สึก
344 Chris

2
ถ้าคุณเพิ่มตัวเลือกให้กับลูกคุณยังสามารถตรวจสอบว่าองค์ประกอบมีลูกที่ตรงกับตัวเลือกเฉพาะเช่นถ้าคุณต้องการดูว่าองค์ประกอบมีลูกของชั้นเรียนที่เฉพาะเจาะจงหรือไม่
Muhd

11
ปัญหาเล็กน้อย ไม่ได้หมายถึง nitpick แต่children().lengthควรถูกเรียกแทนขนาด () ต่อเอกสาร jQuery ที่นี่: api.jquery.com/size
Brian Chavez

4
และถ้าโหนดมีเพียงข้อความ!?
botenvouwer

1
@sirwilliam โหนดจะส่งกลับด้วยความยาว 0
Meki

54

ตัวอย่างนี้จะพิจารณาว่าองค์ประกอบนั้นมีลูกหรือไม่โดยใช้:parentตัวเลือก:

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

โปรดทราบว่า:parentยังพิจารณาองค์ประกอบที่มีโหนดข้อความอย่างน้อยหนึ่งรายการที่จะเป็นพาเรนต์

ดังนั้นdivองค์ประกอบใน<div>some text</div>และ<div><span>some text</span></div>แต่ละคนจะได้รับการพิจารณาว่าเป็นผู้ปกครอง แต่<div></div>ไม่ใช่ผู้ปกครอง


2
ใช่ฉันคิดว่าคำตอบนี้งดงามกว่าของ S Pangborn ทั้งสองอย่างถูกต้องตามกฎหมายอย่างสมบูรณ์แม้ว่า
KyleFarris

1
@Milo LaMar ฉันสงสัยว่ามีความแตกต่างด้านประสิทธิภาพไม่มากนัก แต่วิธีเดียวที่จะแน่ใจได้คือลอง! นอกจากนี้คุณต้องลบช่องว่างระหว่าง#myfavและ:parentในตัวอย่างของคุณมิฉะนั้นตัวเลือกจะไม่เหมือนกับคำตอบที่ฉันให้
dcharles

3
อ่านน้อยมากพอสำหรับฉันตอบ นำมาจาก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
ผลการทดสอบประสิทธิภาพเป็น 0.002s - ฉันชอบวิธีนี้มากที่สุดเพราะสามารถอ่านได้ดีที่สุด ...
dtrunk

1
ฉันสับสนนี่ไม่ใช่คำตอบที่ดีที่สุดเหรอ?
Andrei Cristian Prodan

47

ตัวเลือกอื่นเพียงเพื่อให้ได้ heck:

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

อาจเร็วที่สุดเนื่องจากใช้เครื่องยนต์ Sizzle อย่างเข้มงวดและไม่จำเป็นต้อง jQuery ใด ๆ เหมือนเดิม อาจจะผิด อย่างไรก็ตามมันใช้งานได้


16

จริงๆแล้วมันมีวิธีเนทิฟธรรมดาสำหรับสิ่งนี้

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

<div>text</div>ทราบว่านี้ยังรวมถึงโหนดข้อความที่เรียบง่ายดังนั้นมันจะเป็นจริงสำหรับ


$(...)[0] is undefinedสิ่งนี้อาจเกิดขึ้นหาก#myfavไม่พบ $('#myfav')[0] && $('#myfav')[0].hasChildNodes()ฉันต้องการทดสอบการดำรงอยู่ขององค์ประกอบแรกที่จับคู่ก่อนที่จะใช้เงื่อนไขที่ว่าคือ:
CPHPython

13

และถ้าคุณต้องการตรวจสอบ div มีเด็ก perticular (พูด<p>ใช้:

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

7

นอกจากนี้คุณยังสามารถตรวจสอบว่า div มีลูกเฉพาะหรือไม่

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

}

4

วิธี jQuery

ใน jQuery คุณสามารถใช้$('#id').children().length > 0เพื่อทดสอบว่าองค์ประกอบมีลูกหรือไม่

การสาธิต

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>


วิธีการของวานิลลา JS

หากคุณไม่ต้องการใช้ jQuery คุณสามารถใช้document.getElementById('id').children.length > 0เพื่อทดสอบว่าองค์ประกอบมีลูกหรือไม่

การสาธิต

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>

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.