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

Aru*_*run 4 html javascript jquery 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>
Run Code Online (Sandbox Code Playgroud)

我想选择所有作为main子元素的div标签,但是想要忽略具有"no"类的div的子元素.

我目前已经编写了一个递归函数来完成这项工作.但是想知道是否有一个jQuery选择器来获得我想要的东西.

我希望DIV具有ID a,b,c,d,d1,e,e1

谢谢

编辑:在这里创建了一个测试页面 - http://jsfiddle.net/mRENV/

Fel*_*ing 10

它应该是:

$('#main div').not('.no div')
Run Code Online (Sandbox Code Playgroud)

顺便说一句.术语孩子仅指直接元素的后裔.你想得到所有的后代(不仅仅是孩子)#main.

参考: .not()

编辑:更新了您的演示以使其正常工作:http://jsfiddle.net/fkling/mRENV/1/


Use*_*ode 4

在没有进一步遍历的单个选择器中,您可以执行以下操作: $('#main div:not(div.no > div)');

  • @Arun:只是为了解释结果:第一个更快,因为有两个原因:(a)您正在使用子选择器“&gt;”。没有它,差异会更小([参见此处](http://jsperf.com/finding-children-bug-ignoring-certain-children/2)) (b) 在现代浏览器中,jQuery 可以使用 `querySelectorAll ` 并直接传递一个有效的 CSS 选择器。在较旧的浏览器中,您可能看不到任何区别。 (3认同)