jQuery glisser vers le haut de la ligne de Table
Je construis un plugin jQuery personnalisé qui permet à l'utilisateur de supprimer des enregistrements dans une table en temps réel, entre autres choses. Lorsque les enregistrements sont supprimés, je voudrais que la couleur d'arrière-plan de la ligne de table supprimée devienne rouge, puis glisse hors de la vue.
Voici un extrait de mon code ci-dessous, qui ne fait aucune animation de changement de couleur, et ne glisse pas vers le haut de la ligne. Cependant, il supprime la ligne lorsque ce qui est censé être l'animation slide up, se termine. Quelques choses à savoir lors de la révision du code ci-dessous:
- la variable "object" est une référence jQuery à l'objet qui a été cliqué et a déclenché l'opération de suppression.
- Le " objet.parent().parent () " objet est la ligne qui est en cours de suppression.
- la classe CSS" deleteHighlight " contient la couleur qui transformera la ligne en couleur rouge.
- la méthode" addClass " utilise la méthode "addClass" de jQueryUI, pas celle de jQuery. rappel.
object.parent().parent().addClass('deleteHighlight', 1000, function() {
//Fold the table row
$(this).slideUp(1000, function() {
//Delete the old row
$(this).remove();
});
});
Voici le code HTML sur lequel ceci est exécuté, rien de spécial:
<table class="dataTable">
<thead>
<tr>
<th> </th>
<th>Title</th>
<th>Content Snapshot</th>
<th>Management</th>
</tr>
</thead>
<tbody>
<tr class="odd" id="11" name="1">
<td class="center width50"><a class="dragger"></a><a class="visibilityTrigger eyeShow"></a></td>
<td class="center width150">Title</td>
<td>
<div class="clipContainer">Content</div>
<div class="hide contentContainer">Content</div>
<div class="hide URLContainer">my-url</div>
</td>
<td class="center width75"><a class="edit"></a><a class="delete"></a></td>
</tr>
</tbody>
</table>
Quelqu'un pourrait-il fournir un exemple de la façon dont je peux résoudre ce problème?
Merci pour votre temps.
5 réponses
Je soupçonne que c'est en partie un problème de navigateur.
Vous ne devriez pas vraiment cibler les <tr />
car les navigateurs les interprètent différemment. De plus, ils se comportent différemment des éléments de bloc.
Dans cet exemple: http://jsfiddle.net/lnrb0b/3t3Na/1/ votre code fonctionne partiellement dans google chrome. Le style <tr />
est autorisé (contrairement à certaines versions D'IE) mais vous ne pouvez pas l'animer. Si vous le faites display:block
pas de soucis, mais alors c'est un peu nul comme une table:)
Dans cet exemple: http://jsfiddle.net/lnrb0b/3t3Na/2/{[8] }vous verrez que j'ai animé les <td />
mais ils travaillent à peine et péniblement lentement à cela.
Avoir un test de ceux-ci et je vais essayer de penser à une solution en attendant.
La façon la plus élégante de gérer la diapositive et le retrait est d'envelopper le contenu intérieur de chaque td
avec un div
, et de réduire simultanément le rembourrage du td
et la hauteur du div
. Consultez cette démo simple: http://jsfiddle.net/stamminator/z2fwdLdu/1/
addClass
n'accepte pas une fonction de rappel, car elle s'est exécutée immédiatement. Je pense que vous voudrez peut-être quelque chose de plus comme ça.
object.parent().parent().addClass('deleteHighlight').slideUp(1000, function() {
$(this).remove();
});
Bien sûr, vous pouvez!
Enveloppez chaque td du tr que vous voulez glisser vers le haut dans un div, puis faites glisser ces divs!
Bien sûr, vous devez animer les rembourrages (haut et bas) de chaque td.
Ici vous pouvez trouver un exemple complet ici:
Http://jsfiddle.net/3t3Na/474/
Extrait de mon code source:
$('a').click(function(){
var object = $(this);
object.parent().parent().addClass('deleteHighlight', 1000, function() {
$(this).find('td').each(function(index, element) {
// Wrap each td inside the selected tr in a temporary div
$(this).wrapInner('<div class="td_wrapper"></div>');
// Fold the table row
$(this).parent().find('.td_wrapper').each(function(index, element) {
// SlideUp the wrapper div
$(this).slideUp();
// Remove padding from each td inside the selected tr
$(this).parent().parent().find('td').each(function(index, element) {
$(this).animate({
'padding-top': '0px',
'padding-bottom': '0px'
}, function() {
object.parentsUntil('tr').parent().remove();
});
});
});
Pour une raison quelconque, le wrapInner () avec div ne fonctionnait pas pour moi, donc j'ai fait une solution moins élégante, où vous animez la taille de la police de la ligne, puis la cachez, puis restaurez la taille de la police à la normale alors que la ligne est invisible.
this.trs
.animate({ 'fontSize': '1px' }, 70)
.slideUp(1)
.animate({ 'fontSize': '12px'}, 10)
;
Je l'utilise pour animer des groupes de ressources collapse/expand dans fullcalendar.js + scheduler.vues du calendrier js.