测试div是否没有元素

时间:2012-02-09 15:53:46

标签: jquery jquery-selectors

如果div包含某个元素,我试图做某事,但似乎无法触发这个条件。这是我最好的镜头。

<div class='test'>
    testing123
</div>

<div class='test'>
  <p>testing456</p>
</div>

$('.test').each(function(){
    if(!$(this).has('p')) {
        $(this).addClass('red');
    }
});

该脚本只是针对一切。 这是一个现场小提琴 - http://jsbin.com/igoyuk/edit#javascript,html,live

4 个答案:

答案 0 :(得分:11)

请注意.has() 返回jQuery ,而不是布尔值!

  

.has(selector)返回:jQuery
  描述:将匹配元素集减少到具有与选择器或DOM元素匹配的后代的元素集。

执行if(!$(this).has('p'))总是如此,因为jQuery总是返回一个集合,即使它是空的!

.has()基本上过滤了它所调用的集合,所以你只需要这样做:

$('.test').has('p').addClass('red');

答案 1 :(得分:3)

if (!($(this).find('p').length > 0)) {
    $(this).addClass('red');
}

答案 2 :(得分:2)

考虑使用以下内容:

$("div.test:has(p)").addClass("red");

这会在您的DOM中查询<div>元素,只选择那些带有 test 类的元素,然后查看它是否有<p/>元素。它有点简洁=通过线路的字节更少。

答案 3 :(得分:0)

您可以使用以下条件检查是否缺少元素类型:

if($('p', $(this)).length == 0)

由于$('p', $(this))将返回当前元素中的所有p元素。