div id'de çocuk varsa jquery


202

Bu ifdurum bana sıkıntı veren şey:

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

Aşağıdakilerin hepsini denedim:

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

Yanıtlar:


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

Bu çalışmalı. children()Fonksiyon çocukları içeren bir JQuery nesnesi döndürür. Yani sadece boyutu kontrol etmeniz ve en az bir çocuğu olup olmadığını görmeniz gerekiyor.


1
Cevap için teşekkürler. Bu benim için işe yaradı. .Children () ile doğru yolda olduğumu biliyordum, ama neyin yanlış olduğunu bilmiyordum. Görünüşe göre boyutu 0 olabilir, mantıklı.
Chris

2
Çocuklara bir seçici eklerseniz, bir öğenin belirli bir seçiciyle eşleşen alt öğeleri olup olmadığını da kontrol edebilirsiniz, örneğin bir öğenin belirli bir sınıftan alt öğesi olup olmadığını görmek istersiniz.
Muhd

11
küçük sorun. nitpick için değil ama children().lengthburada jQuery doküman başına size () yerine çağrılmalıdır: api.jquery.com/size
Brian Chavez

4
Peki ya düğüm yalnızca metin içeriyorsa !?
botenvouwer

1
@sirwilliam Düğüm 0 uzunlukta dönecektir.
Meki

54

Bu snippet, öğenin :parentseçiciyi kullanan alt çocukları olup olmadığını belirler :

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

Not :parentaynı zamanda, bir ya da daha fazla metin düğümleri olan bir eleman dikkate alan bir üst olması.

Böylece divelemanlar <div>some text</div>ve <div><span>some text</span></div>her biri bir üst kabul ama olacak <div></div>bir üst değildir.


2
Evet, bu cevabın S Pangborn'dan daha zarif olduğunu düşünüyorum. Her ikisi de tamamen yasal.
KyleFarris

1
@Milo LaMar, performans farkı fazla olmadığından şüphelenirim, ancak emin olmanın tek yolu denemektir! Ayrıca, örneğin #myfavve :parentarasındaki boşluğu kaldırmanız gerekir, aksi takdirde seçici cevabımın sağlayacağı ile aynı değildir.
dcharles

3
Çok az okuma bana cevap verdi. Alındığı 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
Performans test sonuçları 0.002s - ben bu şekilde tercih, çünkü en iyi okunabilir ...
dtrunk

1
Kafam karıştı, bu en iyi cevap değil mi?
Andrei Cristian Prodan

47

Başka bir seçenek, sadece bunun için:

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

Kesinlikle Sizzle motorunu kullandığından en hızlı olabilir ve olduğu gibi herhangi bir jQuery değil. Yine de yanlış olabilir. Yine de işe yarıyor.


16

Bunun için aslında oldukça basit bir yerel yöntem var:

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

Bunun basit metin düğümleri içerdiğini unutmayın, bu nedenle a için geçerli olacaktır <div>text</div>.


$(...)[0] is undefined#myfavbulunmazsa bu olabilir . Ben bu şartı, yani uygulamak için önce ilk eşleşen elemanın varlığını test etmek istiyorum: $('#myfav')[0] && $('#myfav')[0].hasChildNodes().
CPHPython

13

ve div'ın pertiküler bir çocuğu olduğunu kontrol etmek istiyorsanız ( <p>kullanın:

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

7

Div'in belirli çocukları olup olmadığını da kontrol edebilirsiniz,

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

}

4

JQuery yolu

JQuery'de, $('#id').children().length > 0bir öğenin alt öğesi olup olmadığını test etmek için kullanabilirsiniz .

gösteri

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>


Vanilya JS yolu

JQuery kullanmak istemiyorsanız, document.getElementById('id').children.length > 0bir öğenin alt öğesi olup olmadığını test etmek için kullanabilirsiniz .

gösteri

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>

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.