2014-05-14 7 views
7

Wie kann ich das erste (nächste) Element in der Liste, die dem Selektor entspricht?JQuery - Finden Sie die ersten Geschwister Übereinstimmungen Selektor

Beispiel:

<table> 
    <tr class="test"><td>not this one</td></tr> 
    <tr><td><a title="test">click</a></td></tr> 
    <tr><td>not this one</td></tr> 
    <tr class="test"><td>this one</td></tr> 
    <tr class="test"><td>ignore this as well</td></tr> 
</table> 

$("a").on('click', function(eve){ 
    $(this).parents("tr").???(".test").toggle(); 
}); 

bearbeiten

Ich brauche die folgende Zeile. Geschwister bekommt auch andere (wie die erste Zeile)

+1

was wollen Sie tun ?? –

+0

Ich habe einige dynamische Zeilen, die von der vorherigen Zeile ein- und ausgeschaltet werden. Ich kann 'next()' nicht verwenden, da ich nicht sagen kann, welche der Zeilen ich haben werde - und wie viele. – yossi

Antwort

14

Verwenden Sie .nextAll(), um folgende Geschwister eines Elements und :first zu erhalten, um das erste passende Element zu erhalten.

Versuchen Sie folgendes:

$("a").on('click', function(eve){ 
    $(this).parents("tr").nextAll(".test:first").toggle(); 
}); 

DEMO

0

Sie können versuchen, jQuery eq() verwendet; Wenn ein jQuery-Objekt eine Gruppe von DOM-Elementen darstellt, erstellt die .eq() -Methode ein neues jQuery-Objekt aus einem Element innerhalb dieser Menge.

Der mitgelieferte Index identifiziert die Position dieses Elements in der Menge. Documentation on jQuery

<table> 
    <tr class="test"><td>not this one</td></tr> 
    <tr><td><a title="test">click</a></td></tr> 
    <tr><td>not this one</td></tr> 
    <tr class="test"><td>this one</td></tr> 
    <tr class="test"><td>ignore this as well</td></tr> 
</table> 

Der Code würde wählen Sie die 2e Geschwister mit der Klasse „test“ von der < tr>, das ist einer der Eltern auf die geklickt < a> (rot dies umgekehrt und Sie haben Ihre Code):

$("a").on('click', function(){ 
    $(this).parents("tr").siblings(".test").eq(1).toggle(); 
}); 

Check the Pen!

+1

Beantwortet nicht 100% OPs Frage als 1) OP fragte nach den nächsten sblilings also 'nextAll' anstelle von' Geschwister' (wähle auch diese vorher) und 2) er fragte nach dem nächsten (ersten) also 'eq (0) 'anstelle von' eq (1) '. Obwohl du erwähnt hast, dass es das zweite auswählt, ist es immer noch besser, die gestellte Frage direkt zu beantworten :) –