3 Stimmen

jQuery wählt nur Kinder bis zu einer bestimmten Klasse aus

Ich habe einige rekursive HTML-Dateien in der folgenden Baumstruktur:

div.item
 div.content
  input
  div.container
   div.item
    div.content
     input
     div.container
      div.item
       etc...

Hier ist ein jsfiddle mit einem funktionierenden Beispiel: http://jsfiddle.net/HWHRZ/

Ich habe auch ein Objekt mit jQuery Referenzen zu jedem der .item divs.

Was ich tun möchte, ist, für jede spezifische .item wählen Sie nur die unmittelbar darunter liegenden Eingänge aus, nicht aber die tiefer liegenden. .container o .item Elemente.

Um die Sache noch komplizierter zu machen, ist nicht jeder .item ist in Bezug auf die Eingänge identisch aufgebaut. Manchmal können die Eingänge in anderen div Elemente, so dass ihre Auswahl mit einer einfachen .find('> .content :input') wird nicht immer funktionieren.

Ich habe eine Lösung gefunden, aber sie ist bei großen Bäumen ineffizient und überhaupt nicht elegant: $(':input', $item).not($('.container :input', $item)).toggleClass('changed'); ( $item ist eine Referenz, die ich in einem Objekt aufbewahre). Diese Lösung funktioniert, wie sie sollte, aber ist viel zu ineffizient für jede ausreichend große Baumstruktur, ist die not() eine Menge von Knoten verarbeiten müsste.

Kurz gesagt: Ich muss bestimmte untergeordnete Knoten auswählen, die sich NICHT innerhalb bestimmter anderer untergeordneter Knoten befinden.

Kennt jemand eine effizientere Methode, dies zu tun?

1voto

Parv Sharma Punkte 12269

Ich denke

$.each($($(".item")[0]).children(".changed"),function(){
$(this).removeClass("changed")
})

sollte funktionieren.

0voto

Kresten Punkte 1

Diese Funktion könnte helfen:

$.fn.childrenUntil = function( selector, result)
{
    result = typeof result !== 'undefined' ? result : new $();
    this.children().each( function(){
       var thisObject = $( this );
        if( thisObject.is( selector ) ) 
            result.push( this );
        else
            thisObject.childrenUntil( selector, result );
    });
    return result;
}

Er durchläuft den Baum, bis er auf den Selektor trifft.

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