2010-12-06 26 views
0

J'essaie de faire apparaître fadeOut une ligne et fadeIn comme dernière ligne de la table, mais je n'arrive pas à faire fonctionner le fadeIn.Ligne fadeOut et fadeIn comme dernière ligne

Actuellement, j'ai ceci:

function Test(control) { 
      var row = $(control).parents('tr'); 

      row.find("td").fadeOut('slow', function() { 
       var lastRow = $("#table1 tr:last"); 
       lastRow.after(row).fadeIn('slow'); 
      }); 
     } 

Même si je laisse hors fadeIn lastRow.after (ligne) ne semble pas fonctionner.

+0

Vous souhaitez masquer toutes les lignes de la table, puis redessiner la ** dernière ** ligne de la table en vue? –

Répondre

2

.after() retours lastRow, pas la ligne que vous avez inséré après comme vous voulez, donc utiliser .insertAfter() comme ceci:

function Test(control) { 
    var row = $(control).closest('tr'); 
    row.fadeOut('slow', function() { 
    row.insertAfter("#table1 tr:last").fadeIn('slow'); 
    }); 
} 

Notez également que nous sommes la décoloration de la <tr> nous décoloration revenir, pas l'individu <td> éléments (l'effacement du parent n'aide pas si les enfants sont cachés). Regardez aussi .closest() au lieu de .parents() ... c'est beaucoup moins cher/plus précis.


Ce qui précède a été conçu pour montrer la version corrigée, vous pouvez aussi mince vers le bas pour:

function Test(control) { 
    $(control).closest('tr').fadeOut('slow', function() { 
    $(this).insertAfter("#table1 tr:last").fadeIn('slow'); 
    }); 
} 
+0

Merci pour la réponse rapide! Savez-vous pourquoi IE8 l'insérerait sans s'effacer ou disparaître? Cela fonctionne parfaitement dans les autres navigateurs. –

+0

@zLan - Les éléments de la table en fondu sont délicats dans IE car un '' n'est pas réellement un élément affiché, il * devrait * avoir au moins le délai, ne le voyez-vous pas? –

+0

Oui, il y a le retard comme il devrait être en train de disparaître. N'y a-t-il pas une solution facile pour cela? –

0

Que diriez-vous ceci:

$('tr').fadeOut(500, function(){ 
     $(this).appendTo('table').fadeIn(500); 
    }); 

Try it

0

vous pouvez également utiliser

$(this).fadeIn('slow').insertAfter("#table1 tr:last")