2010-11-24 8 views
8

Utilizo un evento de clic para un elemento con cierta clase. Dentro de la función de evento de clic, necesito obtener el siguiente elemento en la página con la misma clase. Probé:Obtener el siguiente elemento con la misma clase

$('.class').click(function() { 
    var $next = $(this).next('.class') 
}); 

Y:

$('.class').click(function() { 
    var $next = $(this).parent().parent().parent().next('.class') 
}); 

El .class es un div dentro de TD en una tabla, por eso tres veces parent().

Mi HTML es algo como esto (El .class es .drag):

<table cellspacing="0" cellpadding="0" border="0" class="black8"> 
<tr class="trow1 drop trow1_over" 
    rel="0,1"> 
    <td> 
      <div class="drop rootFolder" 
       rel="0,1"></div> 
    </td> 
    <td width="100%" 
     class="folderListOnclick"> 

      <span>.. (koreňový adresár)</span> 
    </td> 
    <td> 
    </td> 
    <td> 
    </td> 
</tr><tr class="trow1"> 
    <td> 
     <div class="drag drop ordinaryFolder" 
      rel="1,1" 
      style="width: 40px;"> 

     </div> 
    </td> 
    <td width="100%" 
     class="folderListOnclick" 
     rel="1"> 
      <span>aaa</span> 
    </td> 
    <td> 
     <div class="button_mini folderEditOnclick" 
      rel="1"> 
        <span></span> 

     </div> 
    </td> 
    <td> 
     <div class="button_mini folderDeleteOnclick" 
      rel="1"> 
        <span><span> 
     </div> 
    </td> 
</tr><tr class="trow1"> 
    <td> 

     <div class="drag drop ordinaryFolder" 
      rel="19,1" 
      style="width: 50px;"> 
     </div> 
    </td> 
    <td width="100%" 
     class="folderListOnclick" 
     rel="19"> 
      <span>subaaa</span> 
    </td> 
    <td> 
     <div class="button_mini folderEditOnclick" 
      rel="19"> 

        <span></span> 
     </div> 
    </td> 
    <td> 
     <div class="button_mini folderDeleteOnclick" 
      rel="19"> 
        <span><span> 
     </div> 
    </td> 
</tr> 
</table> 
+0

Podría publicar el código HTML? –

+0

¿Por qué no funciona su enfoque? –

+0

@Luca: Porque 'next()' no funciona de esta manera. Solo devuelve * el siguiente hermano * ** iff ** coincide con el selector dado. –

Respuesta

3

Usted puede tratar de:

$(".drag").click(function() { 
    var draggables = $(this).parents("table").find(".drag"); 
    var $next = draggables.filter(":gt(" + draggables.index(this) + ")").first(); 
}); 
+0

Gracias por esto. Versión ligeramente más limpia de esta línea: 'var $ next = draggables.eq (draggables.index (this));' –

5

¿Qué tal esto? Sin embargo, debe verificar si hay errores "uno por uno", porque no lo he probado.

$('.class').click(function() { 
    var index = $('.class').index($(this)); 
    var $next = $('.class').slice(index+1,index+2); 
    ... 
}); 
+0

Eso no funciona. –

+0

@Richard, mira mi edición. Ahora funciona. –

+1

http://jsfiddle.net/5QdgB/ –

1

Se puede utilizar una combinación de slice() y each():

var elements = $('.class'); 

elements.each(function(index, element) { 
    $(this).click(function() { 
     var $next = elements.slice(index+1, index+2); 
    }); 
}); 

DEMO

alternativa (aunque tal vez menos eficiente) sería la de obtener una referencia al ancestro común y utilizar slice() y index():

$('.class').click(function() { 
    var elements = $(this).closest('table').find('.class'); 
    var index = elements.index(this); 
    $next = elements.slice(index + 1, index + 2); 
}); 
+0

Eso no funciona. –

+0

@Richard: Definir * no funciona *. La demostración funciona como debería, creo. –

+0

Bueno, $ next no estaba definido cuando usé tu código en mi HTML. –

Cuestiones relacionadas