如果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
答案 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
元素。