2012-05-22 20 views
11

Digamos que tengo este código HTML:selector de jQuery para encontrar el primer elemento después de un elemento dado que coincide con un selector de

<textarea>blah</textarea> 
<br> 
<div class="select_this">hello!</div> 

¿Cómo puedo seleccionar el DIV con clase "select_this" cuando ya he identificado el área de texto ? No quiero utilizar un selector de clase en todo el documento porque estoy trabajando con un documento grande y las búsquedas de clase son lentas en los navegadores más antiguos.

jQuery .next() no parece hacer el truco, más cercano() solo busca el árbol DOM, y .nextUntil() califica en todo lo que necesito a excepción del "select_this" div. Alguna otra opción?

+0

[Respuesta bastante relacionada en una pregunta muy similar] (http://stackoverflow.com/a/29084305/274502) – cregox

Respuesta

19

Hay dos maneras de hacerlo.

Use este si sólo tiene un par de hermanos:

$('textarea').nextAll('div.select_this').first(); 

La desventaja de esto es que probar cada elemento posterior para ver si coincide con el selector, incluso después de que se encontró la primera. Utilice esta opción si tiene muchos, muchos hermanos, para ahorrar en la evaluación:

$('textarea').nextUntil('div.select_this').andSelf().last().next(); 

Tenga en cuenta también que es mejor utilizar los métodos first y last, en lugar de sus selectores correspondientes (:first, :last), ya que los navegadores no comprenda de forma nativa los selectores, lo que ralentiza considerablemente la expresión.

Editado para incorporar andSelf por cada comentario a continuación.

+0

¡Gran respuesta! ¡Voto ascendente! – Vishal

+1

El segundo ejemplo no funciona si los dos elementos están uno al lado del otro porque la llamada nextUntil() devuelve un conjunto de resultados vacío. – tnunamak

+0

La respuesta debería incluir lo que dijo @tnunamak. – Zitrax

3

¿Quieres nextAll:

jQuery(yourTextarea).nextAll('.select_this:first'); 
+0

Pregunta de curiosidad: al usar ": first" hace jQuery detener su búsqueda una vez que califica en la primera elemento, o busca a través de todo el DOM y luego solo devuelve el primer elemento que encontró? –

+0

@ElliotB. El último. – lonesomeday

+0

@lonesomeday - Dang, eso no es bueno, ¿hay alguna manera de lograr lo primero? –

Cuestiones relacionadas