选择父级在任何一代中不包含DOM的位置

时间:2012-01-27 15:44:05

标签: jquery jquery-selectors

我无法弄清楚这一点,我可能会让它变得更难。

我需要选择所有带有'B'类的DOMS,其父级'A'在任何一代都不包含'C'类,而'C'不是'B'的兄弟

示例:

我们不会选择B if

A => ({B}, {D => ({C})})

因为B的父母A也包含D,而D包含C.

但是,如果

,我们会选择B.

A => ({B}, {D => ({})})

因为B的父母A确实包含D,但是在A下的这个特定树中没有C。

我试过了:

$('.B').not($(this).parent('.A').find('.C'))

但是这里的not语句实际上选择了'C',并且从B的数组中排除了C本身。我也尝试了has而不是find,但这不仅选择了父A排除,但我相信has只扫描一代。

任何帮助或指导都将不胜感激。

2 个答案:

答案 0 :(得分:1)

当您拨打notthis不是.B时,您已经在正确的轨道上了。您需要传递not函数。

$('.B').not(function(){
    return $(this).parent('.A').find('.C').length;
});

答案 1 :(得分:1)

在这种情况下,由于你对是否应该包含一个元素有一个相当复杂的条件,我会使用filter - 函数并提供一个函数来执行逻辑:

$('.A > .B').filter( function () {
  return $(this).parent().find('.C').length === 0;
});