2009-01-14 9 views
21

Je veux trouver le premier élément span après compteur de classe, dans le code comme ceci:Trouvez l'élément suivant qui n'est pas immédiat?

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

Il semble que la fonction suivante() ne trouve que l'élément suivant immédiat, donc quelque chose comme ceci:

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

Ne fonctionne pas. La façon dont je l'ai utilisé est un peu long et je me demandais s'il y avait un chemin plus court, il est le suivant:

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

Je pense que la méthode closest() dans jQuery 3 fera l'affaire, mais je me sers 1.2 .6 - Y a-t-il une meilleure façon de faire ceci (est-ce que j'utilise juste next()?)

+0

voilà comment je l'ai fait: http://stackoverflow.com/a/30089307/274502 – cregox

Répondre

8

Je pense que votre méthode est la meilleure. Et si vous sentez qu'il ne semble pas bon il suffit de tourner dans un plug-in:

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

Je ne suis pas sûr que la méthode la plus proche fera l'affaire, mais si oui ... peut-être que vous pouvez extraire le méthode la plus proche de 1.3 et le transformer en un plugin?

Je n'ai pas eu l'occasion d'essayer ça, mais essayez-le. Il ne peut pas nuire:

(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

cherchera également plus proche vers le haut. –

3

Je pense que la fonction siblings() est ce que vous recherchez. Essayez quelque chose comme ceci:

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

Une raison pour la downvote? C'est la solution la plus simple au problème. –

+0

Je n'ai pas fait de downvote, mais cela ne vous permet pas seulement de trouver des éléments qui sont des frères et sœurs proches de ceux du .counter. Je pense qu'il veut que le prochain sur la page comme si nous regardions le code source. –

+0

Hmm, possiblement. siblings() fonctionne pour l'exemple de code qu'il a posté. –

0

Essayez quelque chose comme ceci:

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

Hope that helps!

+0

Cela ne fonctionnera pas lorsque vous avez quelque chose comme:

. L'intervalle ne sera pas égalé. –

0

$ (« contre + durée. »)

17

similaire à la réponse marquée, mais semble un peu plus propre en utilisant le: premier sélecteur:

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