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 }

Answers:


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

这应该工作。该children()函数返回一个包含子级的JQuery对象。因此,您只需要检查大小,看看它是否至少有一个孩子。


1
感谢你的回答。这就是对我有用的。我知道使用.children()的方向正确,但是不知道这有什么问题。显然大小可以为0,这是有道理的。
克里斯,2009年

2
如果将选择器添加到子项,则还可以检查元素是否具有与特定选择器匹配的子项,例如是否要查看元素是否具有特定类的子项。
Muhd

11
小问题。并不是指nitpick,而是children().length应根据jQuery文档在此处调用,而不是调用size():api.jquery.com/size
Brian Chavez,

4
如果节点仅包含文本,该怎么办!
botenvouwer

1
@sirwilliam节点将以0的长度返回。
Meki 2015年

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

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

1
我很困惑,这不是最好的答案吗?
安德烈·克里斯蒂安·普罗丹

47

仅此而已的另一种选择是:

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是否有球状孩子(例如<p>使用:

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


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>

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.