2009-10-15 5 views
57

Dites que j'ai des liens avec les flèches haut/bas pour déplacer une rangée de table vers le haut ou vers le bas dans l'ordre. Quelle serait la manière la plus directe de déplacer cette rangée vers le haut ou le bas d'une position (en utilisant jQuery)?Comment déplacer une ligne de table dans jQuery?

Il ne semble pas y avoir de moyen direct de faire cela en utilisant les méthodes intégrées de jQuery, et après avoir sélectionné la ligne avec jQuery, je n'ai pas trouvé un moyen de le déplacer. Aussi, dans mon cas, rendre les lignes draggables (ce que j'ai fait avec un plugin auparavant) n'est pas une option.

+1

Avez-vous la possibilité d'utiliser une grille de contrôle sur votre plate-forme? –

Répondre

146

Vous pouvez aussi faire quelque chose assez simple avec le réglage haut/bas ..

donné vos liens ont une classe de up ou down vous pouvez câbler cela dans le gestionnaire de clic des liens. Ceci est également sous l'hypothèse que les liens sont dans chaque rangée de la grille.

$(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: merci pour cela. Si le style de ligne tr n'apparaît pas, alors comment puis-je déplacer les lignes vers la ligne précédente qui est affichée en bloc? Si aucun style de rangée n'est affiché, alors j'ai besoin de cliquer plusieurs fois pour monter ou descendre. toute suggestion ? – Paulraj

+1

Des suggestions sur la façon de masquer le lien "Up" pour la première rangée et le lien "Down" pour la dernière rangée? – rboarman

+0

@rboarman Quelque chose comme '$ (". Up, .down "). Show();' alors '$ (" tr: premier .up, tr: dernier .down "). Hide();' mais vous devrez peut-être ajuster les sélecteurs à vos besoins exacts. –

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()); 
     } 

    }); 

});

Essayez d'utiliser JSFiddle

+1

peut le raccourcir avec: var row = $ (this) .closest ('tr'); –

Questions connexes