div idに子がある場合はjquery


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つの子があるかどうかを確認する必要があります。


1
答えてくれてありがとう。これは私のために働いたものです。.children()で正しい方向に進んでいることはわかっていましたが、何が問題なのかわかりませんでした。どうやらサイズは0である可能性があります、理にかなっています。
クリス

2
子にセレクターを追加する場合、要素に特定のクラスの子があるかどうかを確認する場合など、要素に特定のセレクターに一致する子があるかどうかを確認することもできます。
Muhd、2011

11
軽微な問題。nitpickを意味するわけではありませんが、children().lengthここではjQueryドキュメントごとにsize()の代わりに呼び出す必要があります:api.jquery.com/size
Brian Chavez

4
そして、ノードにテキストのみが含まれている場合はどうなりますか?
botenvouwer 2013

1
@sirwilliamノードは長さが0で返されます。
Meki

54

このスニペットは、:parentセレクターを使用して要素に子があるかどうかを決定します。

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

:parent、1つ以上のテキストノードを持つ要素も親と見なすことに注意してください。

したがって、およびのdiv要素はそれぞれ親と見なされますが、親ではありません。<div>some text</div><div><span>some text</span></div><div></div>


2
はい、この回答はS Pangbornの回答よりもエレガントだと思います。どちらも完全に合法です。
KyleFarris、2009年

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 2012年

6
0.002sでの性能試験の結果は-それは最高の読みやすいですので、私は、この方法を好む...
dtrunk

1
私は混乱しています、これが最良の答えではありませんか?
Andrei Cristian Prodan 2012年

47

もう一つの選択肢は、それだけのために:

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

Sizzleエンジンを厳密に使用し、必ずしもjQueryを使用するわけではないため、実際には最速の場合があります。しかし、間違っている可能性があります。それにもかかわらず、それは動作します。


16

これには実際には非常に単純なネイティブメソッドがあります。

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

これには単純なテキストノードも含まれるため、の場合はtrueになります<div>text</div>


$(...)[0] is undefinedこれが#myfav見つからない場合に発生する可能性があります。その条件を適用する前に、最初に一致した要素の存在をテストします$('#myfav')[0] && $('#myfav')[0].hasChildNodes()。つまり、
CPHPython

13

あなたがdivをチェックしたい場合は、特定の子供がいます(たとえば<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.