2009-12-02 12 views
8

Ich habe einen DOM in Form vonjquery wählt Geschwister ‚bis‘

<input class="parent"></div> 
<input class="child"></div> 
<input class="child"></div> 
<input class="parent"></div> 
<input class="child"></div> 
... 

, die ich weiß nicht, Recht und der richtigen Weg, dies zu tun wäre, die HTML zu reformieren, sondern kann sagen, das ist nicht möglich.

Wie kann ich jquery alle Kinder von einem Elternteil zu wählen (dh alle .children bis .parent wählen)

Antwort

16

1.4 jQuery hat nun die .nextUntil (Selektor) Funktion:

$('div.parent').toggle(
     function() { 
      $(this).nextUntil('div.parent').hide(); 
     }, 
     function() { 
      $(this).nextUntil('div.parent').show(); 
     } 
    ); 
5

Sie durch die nextAlldiv Geschwister Elemente laufen kann, bis Sie die folgenden .parent finden, lesen Sie in diesem example :

$('.parent').click(function() { 
    $(this).nextAll('div').each(function() { 
    if ($(this).is('.parent')) { 
     return false; // next parent reached, stop 
    } 
    $(this).toggleClass('highlight'); 
    }); 
}); 

Markup verwendet:

<div class="parent">parent 1</div> 
<div class="child">child</div> 
<div class="child">child</div> 
<div class="parent">parent 2</div> 
<div class="child">child</div> 
<div class="parent">parent 3</div> 
<div class="child">child</div> 
<div class="child">child</div> 
<div class="child">child</div> 

...

+0

Ich werde das noch einmal geben. Ich hatte es auf diese Weise gemacht, aber es verursachte viel Langsamkeit, bedingt durch ein zusätzliches DOM-Element, das ich nicht hatte (Wrapper). Ich dachte nicht, dass ich einfach nur falsch zurückkehren würde (ich habe den ganzen Weg überprüft). Ich werde optimieren und es erneut versuchen. Vielen Dank! – jskulski

5

* Siehe @foson Antwort für jquery 1.4+ *

Check out Ben Almans until utils.

Es gibt Ihnen 3 nützliche Methoden: nextUntil, prevUntil, elderensUntil.

+1

Ich endete mit diesem util, sehr einfacher und macht das oben, aber ich muss es nicht beibehalten;) – jskulski

+0

Es lohnt sich, @foson Antwort zu überprüfen, die über nextUtil erzählt – Lijo

0

Ich glaube, keine Notwendigkeit für die oben genannten benutzerdefinierten Funktionen, JQuery diese Funktionalität durch nextUntil(selector, filter) Funktion unterstützt, aber Sie sollten Filter hinzufügen, um nur Ihre Anwendung Skript zu den gefilterten Elementen nicht zu allen folgenden Elementen:

//hide all .child elements 
$('div.child').hide(); 
$('div.parent').click(function() { 
    //Toggle (show or hide) only .child elements until finding .parent element. 
    $(this).nextUntil('div.parent', 'div.child').slideToggle('slow'); 
}); 
Verwandte Themen