jQuery递归地查找子项,但忽略了某些元素

时间:2011-06-16 07:42:29

标签: javascript jquery html jquery-selectors

让我们假设以下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/

3 个答案:

答案 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)');