jquery如果div id有孩子

Chr*_*ris 193 jquery children

这个条件if是给我带来麻烦的:

if (div id=myfav has children) {
   do something
} else {
   do something else 
}
Run Code Online (Sandbox Code Playgroud)

我尝试了以下所有方法:

if ( $('#myfav:hasChildren') ) { do something }
if ( $('#myfav').children() ) { do something }
if ( $('#myfav:empty') ) { do something }
if ( $('#myfav:not(:has(*))') ) { do something }
Run Code Online (Sandbox Code Playgroud)

S P*_*orn 422

if ( $('#myfav').children().length > 0 ) {
     // do something
}
Run Code Online (Sandbox Code Playgroud)

这应该工作.该children()函数返回包含子项的JQuery对象.所以你只需要检查大小,看看它是否至少有一个孩子.

  • 小问题.并不意味着挑剔但应该调用`children().length`来代替size()每个jQuery文档:http://api.jquery.com/size (11认同)
  • 如果节点只包含文本怎么办? (4认同)
  • 如果向子项添加选择器,还可以检查元素是否具有与特定选择器匹配的子项,例如,如果要查看元素是否具有特定类的子项. (2认同)

dch*_*les 52

此代码段将确定元素是否具有使用:parent选择器的子项:

if ($('#myfav').is(':parent')) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

请注意,:parent还会将具有一个或多个文本节点的元素视为父元素.

因此,div在元件<div>some text</div><div><span>some text</span></div>将各自被视为一个父但<div></div>不是父.

  • 性能测试结果为0.002s - 我更喜欢这种方式,因为它的可读性最好...... (6认同)
  • 很少的阅读量对我来说足够了.取自http://api.jquery.com/parent-selector/`附加说明:因为:parent是jQuery扩展而不是CSS规范的一部分,使用:parent的查询无法利用本机提供的性能提升DOM querySelectorAll()方法.要在使用:parent选择元素时获得最佳性能,首先使用纯CSS选择器选择元素,然后使用.filter(":parent"). (3认同)
  • 是的,我认为这个答案比S Pangborn更优雅.两者都完全合法. (2认同)

Kyl*_*ris 47

另一种选择,仅仅是因为它的问题是:

if ( $('#myFav > *').length > 0 ) {
     // do something
}
Run Code Online (Sandbox Code Playgroud)

实际上可能是最快的,因为它严格使用Sizzle引擎,而不一定是任何jQuery.可能是错的.不过,它有效.


Sim*_*mon 16

实际上有一个非常简单的原生方法:

if( $('#myfav')[0].hasChildNodes() ) { ... }
Run Code Online (Sandbox Code Playgroud)

请注意,这还包括简单的文本节点,因此对于a来说也是如此<div>text</div>.


suh*_*lvs 13

如果你想检查div有一个特定的孩子(说<p>使用:

if ($('#myfav').children('p').length > 0) {
     // do something
}
Run Code Online (Sandbox Code Playgroud)


Rak*_*ari 10

您还可以检查 div 是否有特定的孩子,

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

}
Run Code Online (Sandbox Code Playgroud)


Joh*_*ers 5

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');
}
Run Code Online (Sandbox Code Playgroud)
.success {
    background: #9f9;
}

.failure {
    background: #f99;
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)


香草 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');
}
Run Code Online (Sandbox Code Playgroud)
.success {
    background: #9f9;
}

.failure {
    background: #f99;
}
Run Code Online (Sandbox Code Playgroud)
<div id="test">
   <span>Children</span>
</div>
<div id="test2">
   No children
</div>
Run Code Online (Sandbox Code Playgroud)