2009-01-14 2 views
21

Ich mag das erste Wegstück Element nach Klasse Zählern zu finden, wie dies in Code etwas:Finden Sie das nächste Element, das nicht unmittelbar ist?

<div class="counter"></div> 
<p></p> 
<span></span> 

Es scheint, wie die nächste() Funktion nur das unmittelbare nächste Element findet, so etwas wie diese:

$(".counter").next("span") 

Funktioniert nicht. Die Art, wie ich verwendet habe etwas langatmig ist und ich frage mich, ob es ein kürzerer Weg war, ist es das:

$(".counter").nextAll("span").eq(0) 

Ich denke, die closest() Methode in jQuery 3 wird es tun, aber ich bin mit 1.2 .6 - Gibt es einen besseren Weg, dies zu tun (verwende ich nur next() falsch?)

+0

das ist, wie ich habe es getan: http://stackoverflow.com/a/30089307/274502 – cregox

Antwort

8

Ich denke, Ihre Methode ist der beste Weg. Und wenn Sie das Gefühl, es sieht nicht gut aus nur machen es zu einem Plugin:

jQuery.fn.firstAfter = function(filter){ 
return this.nextAll(filter).eq(0); 
} 
1

Ich bin mir nicht sicher, dass die nächste Methode den Trick tun wird, aber wenn ja ... vielleicht können Sie die extrahieren nächste Methode aus 1.3 und verwandelte es in ein Plugin?

Ich hatte keine Chance, dies zu versuchen, aber geben Sie es eine Chance. Es kann nicht schaden:

(function($) { 
    $.fn.closest = function (selector) { 
    return this.map(function(){ 
     var cur = this; 
     while (cur && cur.ownerDocument) { 
     if ($(cur).is(selector)) 
      return cur; 
     cur = cur.parentNode; 
     } 
    }); 
    } 
})(jQuery); 
+0

Closest wird auch nach oben suchen. –

3

Ich denke, die siblings() Funktion ist das, was Sie suchen. Probieren Sie etwas wie folgt aus:

$(".counter").siblings("span"); 
+0

Irgendein Grund für den Downvote? Dies ist die einfachste Lösung für das Problem. –

+0

Ich habe nicht downvote, aber finden Sie nicht nur Elemente, die unmittelbare Geschwister zum .counter sind. Ich denke, er will das nächste auf der Seite, als ob wir den Quellcode anschauen würden. –

+0

Hmm, möglicherweise. Geschwister() arbeitet für den von ihm geposteten Beispielcode. –

0

so etwas wie dieses versuchen:

$(".counter ~ span:first"); 

Hoffnung, das hilft!

+0

Dies funktioniert nicht, wenn Sie etwas wie:

haben. Der Bereich wird nicht abgeglichen. –

0

$ („counter + Spanne.“)

17

Ähnlich wie die deutliche Antwort, aber sieht ein wenig sauberer mit der: erste Auswahl:

$('.counter').nextAll('span:first')