我无法弄清楚这一点,我可能会让它变得更难。
我需要选择所有带有'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
只扫描一代。
任何帮助或指导都将不胜感激。
答案 0 :(得分:1)
当您拨打not
,this
不是.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;
});