W tej próbki znaczników (przy założeniu, że dowolną liczbę elementów pomiędzy .outer
i .inner
:jQuery selektor filtrujący do usuwania elementów zagnieżdżone dopasowanie wzorca
<div class="outer">
<div>
<div>
<div class="inner"></div>
</div>
</div>
</div>
można skonfigurować jQuery wybranie zewnętrzne i wewnętrzne div w następujący sposób:
$outer = $('.outer');
$inner = $outer.find('.inner')
działa dobrze.
jednak powiedzmy chcę, aby umożliwić nieograniczoną zagnieżdżenie tej logiki, więc może mam jes s:
<div class="outer"> div a
<div class="inner"> div b
<div class="outer"> div c
<div class="inner"> div d </div>
</div>
</div>
</div>
W tej sytuacji, przy wyborze div via .outer
Chcę dopasować go tylko div b. Innymi słowy, chcę wykluczyć przodków z zagnieżdżonego przodka .outer
.
Chciałbym mieć parings of outer i inner (s) zawarte w ich poziomie gniazdowania.
Mam nadzieję, że .filter()
może go usunąć, ale nie może myśleć o selektorze, który działałby uniwersalnie dla nieograniczonych wzorów zagnieżdżonych. Czy można to zrobić za pomocą filtra? A może nawet bezpośredni wzór selektora?
UPDATE:
Myślę, że coś takiego może działać, ale nie wiem, jak można (lub jeśli jest to dozwolone) odniesienie 'to' w selektor:
$outer = $('.outer');
$inner = $outer.not('this .outer').find('.inner')
UPDATE 2:
Powinienem był o tym wspomnieć: .inner
zawsze będzie potomkiem .outer
, ale niekoniecznie bezpośrednim dzieckiem.
UPDATE 3:
Oto kilka próbek testowych HTML, które mogłyby zostać wykorzystane. W każdym przypadku chciałbym móc wybrać .outer i sparować plik .inner, który zawiera między sobą i zagnieżdżoną zewnętrzną. Dla jasności, to dodaje nazwisk każdej div (zewnętrzna x pary z wewnętrznymi-X)
//sample 1
<div class="outer"> outer-a
<div>
<div class="inner"> inner-a
<div class="outer"> inner-b
<div class="inner"> inner-b </div>
</div>
</div>
</div>
<div>
<div class="inner"> inner-a </div>
</div>
</div>
//sample 2
<div class="outer"> outer-a
<div class="inner"> inner-a
<div class="outer"> inner-b
<div>
<div class="inner"> inner-b </div>
</div>
</div>
</div>
</div>
//sample 3
<div class="outer"> outer-a
<div class="inner"> inner-a
<div class="outer"> inner-b
<div class="inner"> inner-b
<div class="outer"> outer-c
<div class="inner"> inner-c</div>
</div>
</div>
</div>
</div>
</div>
//bonus sample (we're trying to avoid this)
<div class="outer"> outer-a
<div class="inner outer"> inner-a outer-b
<div class="inner"> inner-b </div>
</div>
</div>
UPDATE 4
myślę skończyło się w dół podobną drogą jak Gnarf. Skończyło się to:
var $outer = $('.outer');
var $inner = $outer.find('.inner').filter(function(){
$(this).each(function(){
return $(this).closest('.outer') == $outer;
});
});
Czy jestem na dobrej drodze? To nie działa, więc zakładam, że mam jeszcze pewien błąd logiczny.
To nie ma sensu - nawet jeśli pasuje do pierwszego gniazda i tylko usuń to - jego dzieci zostaną usunięte mimo wszystko. – Matt