Я пытаюсь выбрать только первый «слой» дочерних элементов заданного типа, но не элементы, вложенные в другой квалификационный элемент. Например. в:jQuery/JavaScript: выбор первого «слоя» только для детей
<div id='top'>
<div id="s1" class="special">
<div id="s2" class="special"></div>
</div>
<div>
<div id="s3" class="special"></div>
</div>
</div>
Я хотел бы найти # s1 и s3 #, но не # s2, с чем-то вроде $ ('# топ') найти ('специальные:. not_nested').. Возможно ли это с помощью jQuery? XPATH?
Я думал о пользовательских фильтрах jQuery, таких как expr [':']. Not_nested, но не могу понять, как принять во внимание верхний родитель ($ ('# top') в этом случае), потому что может быть другими .специальными классами далее в родительской цепочке #top.
[изменить] Я должен упомянуть прямо сейчас, я прибегаю к рекурсивному вызову $ .fn.children(), который, я думаю, не очень эффективен.
[edit2] протестирован рабочий код:
var node = $('#top'),
result = (node.find('.special').filter(function(){
return !($(this).parent().closest(".special", node).length);
}));
Однако, это не работает, если "#top" имеет сам .special класс. Так может быть, это:
var node = $('#top'),
result= node.find('.special').filter(function(){
var parent = $(this).parent().closest(".special", node);
return !parent.length || parent.is(node);
});
http://api.jquery.com/children/ – Dave
Это не сработает, поскольку он находит только прямых детей, мне нужно найти внуков, если они не вложены под другими детьми/внуками из ".специальных" , – user1066127
Отметьте мое редактирование, оно добавит проверку на это –