Я пытаюсь выбрать только первый «слой» дочерних элементов данного типа, но не элементы, вложенные в другой квалифицирующий элемент. Например. в:
<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, с чем-то вроде $ ('# top'). Find ('. Special: 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);
});