2011-01-11 10 views
8

Esto funciona:¿Cómo seleccionar el siguiente elemento coincidente?

<a href="#/link1">link1</a> 
<a href="#/link2">link2</a> 
<a href="#/link3">link3</a> 

$("a[href*='#/link1'").next('a[href*="#"]').click(); 

pero esto no es así:

<a href="#/link1">link1</a><br> 
<a href="#/link2">link2</a><br> 
<a href="#/link3">link3</a><br> 

$("a[href*='#/link1'").next('a[href*="#"]').click(); 

Lo anterior pone a prueba la etiqueta "< br>", no el siguiente enlace a juego.

¿Cómo haré para que funcione en ambas situaciones? Quiero seleccionar el siguiente elemento coincidente, no el siguiente elemento si coincide. Tal vez .next() no es el método correcto?

Respuesta

17

El segundo ejemplo no debe seleccionar nada en absoluto. Leer el documentation of next:

Obtener el hermano inmediatamente después de cada elemento en el conjunto de los elementos coincidentes. Si se proporciona un selector, recupera el siguiente hermano solo si coincide con ese selector.

usted tiene que utilizar para conseguir nextAll todos los hermanos y filtrarlos en consecuencia:

$("a[href*='#/link1']").nextAll('a[href*="#"]:first').click(); 

Referencia: nextAll

+1

Creo que el PO es consciente de las deficiencias de '.Next() ', asegúrese de leer la * toda * pregunta;) –

+0

@Nick Craver: Juro que fue escrito * Lo anterior ** selecciona ** la etiqueta'
'* ... tal vez era sólo deseable nking ... Estoy cansado;) –

+0

¿Qué ocurre exactamente si no usas ": first"? ¿Haría clic en todos los enlaces? – Dave

5

Uso .nextAll() y :first para obtener el siguiente hermano que coincide, en lugar de la siguiente hermano si coincide, como esto:

$("a[href*='#/link1'").nextAll('a[href*="#"]:first').click(); 
Cuestiones relacionadas