2 Stimmen

Auswählen von nicht verschachtelten Unterknoten mit JQuery

Ich habe eine HTML-Struktur, die verschachtelte divs mit dem container Klasse:

<div class="container" id="0">
  <div id="1">
    <div class="container" id="2">
      <div class="container" id="3"></div>
    </div>
    <div id="4">
      <div class="container" id="5"></div>
    </div>
  </div>
</div>

Dazu könnten mehr Divs und tiefere/andere Verschachtelungen gehören.

Ausgehend von einem bestimmten Punkt im Baum möchte ich alle Container in diesem Teilbaum finden, die nicht in anderen Containern verschachtelt sind. Also zum Beispiel von div #1 Ich würde gerne die Divs finden #2 y #5 , aber nicht #3 (da er im Container verschachtelt ist #2 bereits gefunden).

Wie lässt sich dies am besten bewerkstelligen?

2voto

treeface Punkte 13082

Versuchen Sie die Verwendung von jQuery's filter() Methode:

$items = $('#0').find('.container').filter(function(index) {
    return !$(this).parents(':not(#0)').hasClass('container');
});

Grundsätzlich findet es alle Elemente mit der Klasse .container unter Ihrem Oberteil .container und filtert die Menge danach, ob der direkte Elternteil die Klasse .container .

Hier finden Sie ein funktionierendes Beispiel: http://jsfiddle.net/TzL8Z/1

2voto

davin Punkte 43431
function getOuterContainers(el) {

    if (el.length == 0)
        return $([]);
    else
        return el.children('.container').add( getOuterContainers(el.children(':not(.container)')) );

}

überprüfen Sie es: http://jsfiddle.net/GZ3Tx/

0voto

sth Punkte 210180

Eine Lösung, die mit beliebigen Startknoten arbeitet:

function getContainers(base) {
   return base.find('.container').not(base.find('.container .container'));
}

Beispiel: http://jsfiddle.net/tejp/GSRH2/2/

Der Vorteil ist, dass dies mit einem beliebigen Startknoten funktioniert, der nicht mit einem einfachen JQuery-Selektor auswählbar sein muss, wie es in einigen der anderen Antworten der Fall ist. Außerdem muss man nicht "manuell" über den ganzen Baum gehen mit children() .

Der Ansatz kann auch leicht auf ähnliche Probleme ausgeweitet werden, wie z. B. die Ermittlung aller .item s, die nicht in eine .container .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X