150 votes

jQuery utilise append avec des effets

Comment puis-je utiliser .append() avec des effets comme show('slow')

Ayant des effets sur append ne semble pas fonctionner du tout, et donne le même résultat que la normale. show() . Pas de transitions, pas d'animations.

Comment puis-je ajouter un div à un autre, et avoir une slideDown o show('slow') effet sur elle ?

202voto

Matt Ball Points 165937

Avoir des effets sur append ne fonctionnera pas car le contenu affiché par le navigateur est mis à jour dès que le div est ajouté. Donc, pour combiner les réponses de Mark B et de Steerpike :

Donnez un style caché à la division que vous allez ajouter avant de l'ajouter réellement. Vous pouvez le faire avec une CSS script en ligne ou externe, ou simplement créer la div en tant que

<div id="new_div" style="display: none;"> ... </div>

Puis vous pouvez enchaîner des effets à votre appendice ( Démonstration ) :

$('#new_div').appendTo('#original_div').show('slow');

Ou ( Démonstration ) :

var $new = $('#new_div');
$('#original_div').append($new);
$new.show('slow');

5 votes

Était probablement le style en ligne, l'ajout d'une classe css comme "hidden" qui équivaut à display : none est "plus classe" (baddoom tsh) ;)

2 votes

Ça ne marchera pas. Lorsque vous utilisez append, il renvoie l'original_div et non l'élément nouvellement ajouté. Vous appelez donc en fait show sur le conteneur.

1 votes

@Vic comme il se doit .append() ne prend même pas de chaîne de sélection. L'idée reste cependant correcte. Merci, mise à jour.

127voto

Derek Illchuk Points 3403

L'essence est la suivante :

  1. Tu appelles "append" sur le parent.
  2. mais vous voulez appeler 'show' sur le nouvel enfant

Cela fonctionne pour moi :

var new_item = $('<p>hello</p>').hide();
parent.append(new_item);
new_item.show('normal');

ou :

$('<p>hello</p>').hide().appendTo(parent).show('normal');

2 votes

J'ai essayé ces deux méthodes et ça ne marche pas. Il n'y a pas d'effet de glissement sur le contenu ajouté.

0 votes

'normal' n'est pas une chaîne appropriée pour la vitesse. Laissez-la vide pour une transition nulle (s'affiche immédiatement). utilisez la chaîne 'fast' pendant 200 ms ou 'slow' pendant 600ms. ou tapez un nombre quelconque comme $("element").show(747) (= 747ms) pour définir sa propre vitesse. voir l'onglet docs et recherchez l'animation / la durée.

2 votes

Avec effet de glissement : element.slideUp("slow", function(){ element.appendTo(parent).hide(); element.slideDown(); });

25voto

naspinski Points 9810

Une autre façon de travailler avec des données entrantes (comme celles d'un appel ajax) :

var new_div = $(data).hide();
$('#old_div').append(new_div);
new_div.slideDown();

17voto

Mark Bell Points 11287

Quelque chose comme :

$('#test').append('<div id="newdiv">Hello</div>').hide().show('slow');

devrait le faire ?

Edit : désolé, erreur dans le code et j'ai aussi pris en compte la suggestion de Matt.

1 votes

Je ne suis pas sûr que ça fasse ce qu'il veut, mais si c'est le cas, vous enchaînez les fonctions : $('#divid').append('#newdiv').hide().show('slow') .

0 votes

Cela fonctionne ; le bit #newdiv n'est pas correct et vous avez raison, vous pouvez les enchaîner. J'ai modifié ma réponse.

0 votes

C'est la meilleure réponse : une ligne propre et qui fait ce qu'elle est censée faire.

4voto

Steerpike Points 5937

Définissez la div ajoutée pour qu'elle soit initialement cachée par le biais de css. visibility:hidden .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X