jquery find() - 如何排除某些后代和他们的孩子?

时间:2012-10-17 16:44:01

标签: jquery jquery-selectors

我有类似的标记:

<div class='wrapper plugin'>
    //some content
    <div class='child-wrapper plugin'>
      //some more content
      <div>
        <ul>     
          <li><div class='cliky'>clicky!</div></li>
        </ul>
      </div>
    </div>
  <div class='cliky'>clicky!</div>
</div>

我需要能够选择第一个 .clicky div ,而不是.clicky div中的任何.plugin > .plugin div 。

包装器也有.plugin类 - 可能看起来反直觉,所以查看它的另一种方法是:我想得到给定.clicky div的.plugin个孩子,但是不是.plugin .plugin .clicky

我尝试过选择器:

$('.wrapper').find('.clicky').not('.plugin > .clicky');

但是他们仍然选择了所有子.clicky元素 - 包括嵌套.plugin元素的元素。

我如何才能仅选择特定.plugin .clicky div的.plugin元素,而不选择任何.plugin .plugin .clicky元素?

3 个答案:

答案 0 :(得分:4)

试试这个:

$('.wrapper .clicky').filter(function(){
   return $(this).parents('.plugin').length === 1
})

答案 1 :(得分:1)

$('.wrapper').find('.plugin .clicky')[0];

应返回“found”数组的第一个元素。如果需要将结果合并到jquery obj中,只需重新获取它。

var t = $( $('.wrapper').find('.plugin .clicky')[0]);

答案 2 :(得分:1)

您可以使用:

$('.wrapper .cliky').not('.plugin > .plugin .cliky');

$('.wrapper .cliky:not(.plugin > .plugin .cliky)');

在jQuery 1.9中测试