JQuery: выберите все элементы, которые не являются потомками определенного класса
<div class="container" id = "0" >
<div class="x" id = "1">
<div id = "2">
<p id = "3">
<span id = "4" >text</span>
</p>
<div>
</div>
<div id="5">
<div id="6">
<p id="7">
<span class="x" id="8" >text</span>
<span id="9">text</span>
</p>
<div>
</div>
<div>
Можете ли вы помочь мне выбрать все элементы:
- которые являются потомками '.container' '
- не потомок '.x'
- не имеет самого класса '.x'.
Взгляд на HTML выше; он должен выбрать элементы 5,6,7 и 9
- Элемент 1 имеет класс "X"
- Элементы 2 являются прямым дочерним элементом элемента с классом "X" (элемент 1)
- Элементы 3 и 4 являются потомками элемента с классом "X" (элемент 1)
Элемент 8 имеет класс "X"
У меня есть этот селектор, но он продолжает выбирать потомков (глубоких детей) элемента с классом "X"
var elements = $('.container').find().parents(':not(.X)').andSelf().filter(':not(.X)');
Ответы
Ответ 1
Это должно сделать это:
$('.container').find(':not(.x):not(.x *)');
Изменить: снова вернуться к первой ревизии. Я думал, что это не сработало, но у вас есть ошибка в вашем HTML, которая делает #1
родительский элемент всех элементов, поэтому никто не выбран.
<div class="container" id = "0" >
<div class="x" id = "1">
<div id = "2">
<p id = "3">
<span id = "4" >text</span>
</p>
<div> <!-- <-- must be a closing div tag -->
</div>
<div id="5">
<div id="6">
<p id="7">
<span class="x" id="8" >text</span>
<span id="9">text</span>
</p>
<div> <!-- <-- must be a closing div tag -->
</div>
<div> <!-- <-- must be a closing div tag -->
Ответ 2
с использованием подстановочных знаков
$(".container :not(* .x)")
или
$(":not(* .x)", ".container")
может работать.