让我们假设以下HTML
<div id=main>
<div id=a></div>
<div id=b></div>
<div id=c></div>
<div id=d>
<div id=d1 class="no">
<div id=d11></div>
<div id=d12></div>
</div>
</div>
<div id=e>
<div id=e1 class="no">
<div id=e11></div>
<div id=e12></div>
<div id=e13></div>
</div>
</div>
</div>
我想选择所有作为main子元素的div标签,但是想要忽略具有“no”类的div的子节点。
我目前编写了一个递归函数来完成这项工作。但是想知道是否有一个jQuery选择器来获得我想要的东西。
我希望DIV带有ids a,b,c,d,d1,e,e1
由于
编辑:在此处创建了一个测试页 - http://jsfiddle.net/mRENV/
答案 0 :(得分:10)
应该是:
$('#main div').not('.no div')
顺便说一下。术语 children 仅指元素的直接后代。您希望得到#main
的所有后代(不仅仅是孩子)。
参考: .not()
修改:更新了您的演示,使其正常运行:http://jsfiddle.net/fkling/mRENV/1/
答案 1 :(得分:4)
使用jQuery实现这一点的几种语法方法,我的建议是:
var $result = $('#main').find('div:not(.no > div)');
调用.find()
help和伪:not()
help选择器。这一行相当于:
var $result = $('#main').find('div').not('.no > div');
而后者可能稍快一些。
答案 2 :(得分:4)
在没有进一步遍历的单个选择器中,您可以执行此操作:
$('#main div:not(div.no > div)');