jQuery选择.not,.closest和.find一起使用的类

时间:2017-06-20 22:14:25

标签: jquery

示例:

<div class="main">
<div><div class="left"></div></div>
<div><div class="special"></div></div>
</div>

<div class="main">
<div><div class="right or center or any"></div></div>
<div><div class="special"></div></div>
</div>

我想选择所有特殊类,但过滤掉.closest(&#39; .main&#39;)。find(&#39; .left&#39;)

所以,我想要这样的事情:

$('.special').not('.special').closest('.main').find('.left')

当然这不正确,但我没有找到任何使用.not选择器和.close和.find的例子。

2 个答案:

答案 0 :(得分:1)

你去吧

$('.special').filter(function () {
  if ($(this).closest('.main').find('.left').length > 0) {
    console.log('invalid', $(this));
  } else {
    console.log('valid', $(this));
  }
});

更新

var list = $('.special').filter(function () {
  return ($(this).closest('.main').find('.left').length == 0);
});

console.log(list);

使用过滤器,您可以应用自己的过滤器并接收与其匹配的元素列表

答案 1 :(得分:0)

要选择类special的所有元素,但要使用您的条件排除,请执行以下操作:

$('.special').each(function(){
    if(!$(this).closest('.main').find('.left')) {
        // logs element to console
        console.log(this);
    }
});

另一种基于HTML的方法是这样的:

$('.special').each(function(){
    if(!$(this).parent('div').siblings('div').children('.left')) {
        // logs element to console
        console.log(this);
    }
});

此外,在课程div的{​​{1}}内,您似乎在内心main附近有一个额外的(不必要的)div。我建议删除它们并相应地更新代码以保持代码清洁。