Angesichts dieser Probe Auszeichnungs (eine zufällige Anzahl von Elementen zwischen .outer
und .inner
vorausgesetzt:jQuery Filterungs Selektors geschachtelte Elemente entfernen Musterabgleich
<div class="outer">
<div>
<div>
<div class="inner"></div>
</div>
</div>
</div>
I jQuery einrichten können die äußeren und inneren divs als solche wählen:
$outer = $('.outer');
$inner = $outer.find('.inner')
funktioniert.
Doch lassen Sie uns sagen, dass ich eine unbegrenzte Verschachtelung dieser Logik zulassen wollen, so kann ich thi 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>
In dieser Situation, wenn div ein über .outer
Auswahl mag ich es passend mit nur div b. Mit anderen Worten, ich möchte Vorfahren eines verschachtelten .outer
Vorfahren ausschließen.
Ich hätte gerne Partings von äußeren und inneren (s) enthalten innerhalb ihrer Verschachtelungsebene.
Ich hoffe, .filter()
könnte es abziehen, aber kann nicht an einen Selektor denken, die universell für unbegrenzte verschachtelte Muster arbeiten würde. Ist es möglich, einen Filter zu verwenden? Oder vielleicht sogar ein direktes Selektormuster?
UPDATE:
Ich denke, so etwas wie dies funktionieren könnte, aber nicht sicher, wie kann man (oder, wenn es erlaubt) Referenz 'this' in einem Selektor:
$outer = $('.outer');
$inner = $outer.not('this .outer').find('.inner')
UPDATE 2:
Ich sollte dies zunächst erwähnt haben: .inner
wird immer ein Nachkomme von .outer
sein, aber nicht unbedingt ein unmittelbares Kind.
UPDATE 3:
Hier einige Testproben von HTML, die verwendet werden könnten. In jedem Fall möchte ich in der Lage sein, die .outer-Datei auszuwählen und die .inner-Datei, die sie enthält, zwischen sich und der verschachtelten äußeren Seite zu paaren. Aus Gründen der Klarheit hinzugefügt I Namen zu jeder div (Außen-x-Paare mit Innen-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
Ich glaube, ich beenden einen ähnlichen Weg wie Gnarf hinunter auf. Ich bin damit gelandet:
var $outer = $('.outer');
var $inner = $outer.find('.inner').filter(function(){
$(this).each(function(){
return $(this).closest('.outer') == $outer;
});
});
Bin ich auf dem richtigen Weg dahin? Es funktioniert nicht, also nehme ich an, dass ich immer noch einen logischen Fehler habe.
Dies macht keinen Sinn - auch wenn Sie das erste Nest passen und nur entfernen Sie das - seine Kinder würden sowieso entfernt werden – Matt