2009-01-14 17 views
21

Quiero encontrar el primer elemento span después del mostrador de clase, en el código de algo como esto:Encuentra el siguiente elemento que no es inmediato?

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

Parece que la función next() sólo se encuentra el siguiente elemento de inmediato, por lo que algo como esto:

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

No funciona. La forma en que he estado usando es un poco largo y me preguntaba si había una manera más corta, es la siguiente:

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

creo que el método closest() en jQuery 3 hará el truco, pero yo estoy usando 1.2 .6 - ¿hay una mejor manera de hacerlo (estoy usando el next() incorrecto?)

+0

así es como lo he hecho: http://stackoverflow.com/a/30089307/274502 – cregox

Respuesta

8

Creo que su método es la mejor manera. Y si siente que no se ve bien simplemente convertirlo en un plugin:

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

No estoy seguro de que el método más cercano sea el truco, pero si es así ... tal vez puedas extraer el método más cercano de 1.3 y convertirlo en un complemento?

No he tenido la oportunidad de probar esto, pero le doy una oportunidad. No puede hacer daño:

(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

más cercano también buscará hacia arriba. –

3

creo que la función siblings() es lo que busca. Intentar algo como esto:

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

¿Alguna razón para el voto a favor? Esta es la solución más simple al problema. –

+0

No he votado negativamente, pero esto no solo te permite encontrar elementos que sean hermanos inmediatos de .counter. Creo que quiere el siguiente en la página como si estuviéramos mirando el código fuente. –

+0

Hmm, posiblemente. hermanos() trabaja para el código de ejemplo que publicó. –

0

intentar algo como esto:

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

Espero que ayude!

+0

Esto no funcionará cuando tenga algo así como:

. El lapso no se igualará. –

0

$ ("contador + lapso.")

17

Similar a la respuesta marcada, pero se ve un poco más limpio mediante el: primer selector:

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