2009-10-15 70 views
57

Supongamos que tengo enlaces con flechas arriba/abajo para mover una fila de tabla hacia arriba o hacia abajo en orden. ¿Cuál sería la forma más directa de mover esa fila hacia arriba o hacia abajo una posición (usando jQuery)?¿Cómo mover la fila de la tabla en jQuery?

No parece haber ninguna manera directa de hacer esto usando los métodos integrados de jQuery, y después de seleccionar la fila con jQuery, no he encontrado una manera de moverlo. Además, en mi caso, hacer que las filas sean arrastrables (lo que he hecho con un plugin anteriormente) no es una opción.

+1

¿Tiene la opción de utilizar un control de cuadrícula en su plataforma? –

Respuesta

146

También podría hacer algo bastante simple con el ajuste hacia arriba/abajo ..

dado sus enlaces tienen una clase de up o down Puede conectar este en el controlador de clic de los enlaces. Esto también es bajo la suposición de que los enlaces están dentro de cada fila de la grilla.

$(document).ready(function(){ 
    $(".up,.down").click(function(){ 
     var row = $(this).parents("tr:first"); 
     if ($(this).is(".up")) { 
      row.insertBefore(row.prev()); 
     } else { 
      row.insertAfter(row.next()); 
     } 
    }); 
}); 

HTML:

<table> 
    <tr> 
     <td>One</td> 
     <td> 
      <a href="#" class="up">Up</a> 
      <a href="#" class="down">Down</a> 
     </td> 
    </tr> 
    <tr> 
     <td>Two</td> 
     <td> 
      <a href="#" class="up">Up</a> 
      <a href="#" class="down">Down</a> 
     </td> 
    </tr> 
    <tr> 
     <td>Three</td> 
     <td> 
      <a href="#" class="up">Up</a> 
      <a href="#" class="down">Down</a> 
     </td> 
    </tr> 
    <tr> 
     <td>Four</td> 
     <td> 
      <a href="#" class="up">Up</a> 
      <a href="#" class="down">Down</a> 
     </td> 
    </tr> 
    <tr> 
     <td>Five</td> 
     <td> 
      <a href="#" class="up">Up</a> 
      <a href="#" class="down">Down</a> 
     </td> 
    </tr> 
</table> 

Demo - JsFiddle

+0

@Quintin: gracias por esto. Si el estilo de la fila tr no muestra ninguno, ¿cómo puedo mover las filas a la fila anterior que se muestra bloque? si cualquier estilo de fila se muestra ninguno, entonces tengo que hacer clic varias veces para subir o bajar. cualquier sugerencia ? – Paulraj

+1

¿Alguna sugerencia sobre cómo ocultar el enlace "Arriba" para la primera fila y el enlace "Abajo" para la última fila? – rboarman

+0

@rboarman Algo parecido a '$ (". Up, .down "). Show();' then '$ (" tr: primero .up, tr: last .down "). Hide();' pero es posible que necesite ajustar los selectores a sus necesidades exactas. –

6
$(document).ready(function() { 
    $(".up,.down").click(function() { 
     var $element = this; 
     var row = $($element).parents("tr:first"); 

     if($(this).is('.up')){ 
     row.insertBefore(row.prev()); 
     } 
     else{ 
     row.insertAfter(row.next()); 
     } 

    }); 

});

Intente utilizar JSFiddle

+1

puede acortarlo con: var row = $ (this) .closest ('tr'); –

Cuestiones relacionadas