Выберите, где родитель не содержит DOM в любом поколении - PullRequest
1 голос
/ 27 января 2012

Я не могу понять это, и, возможно, я усложняю это, чем это.

Мне нужно выбрать все DOMS с классом 'B', чей родитель, 'A', не делаетсодержит класс 'C' в любом поколении, и 'C' НЕ является родственным братом 'B'

Пример:

Мы не выбрали бы B, если

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

Поскольку родитель B, A, также содержит D, а D содержит C.

Однако мы бы выбрали B, если

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

, потому чтоРодитель B, A, содержит D, но C нигде не находится в этом конкретном дереве под A.

Я пробовал:

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

Но оператор notздесь фактически выбирается 'C' и исключается сам C из массива B. Я также попытался has вместо find, но это не только выбирает родительский A для исключения, но я считаю, что has только просматриваетодно поколение.

Буду признателен за любую помощь или руководство.

Ответы [ 2 ]

1 голос
/ 27 января 2012

В этом случае, поскольку у вас довольно сложное условие, должен ли элемент быть включен или нет, я бы использовал функцию filter и предоставил бы функцию для выполнения логики:

$('.A > .B').filter( function () {
  return $(this).parent().find('.C').length === 0;
});
1 голос
/ 27 января 2012

Вы на правильном пути с тем, что у вас там, когда вы звоните not, this это не .B, хотя.Вам нужно передать not функцию.

$('.B').not(function(){
    return $(this).parent('.A').find('.C').length;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...