Je viens donc d'essayer de déboguer l'erreur suivante :
<script>
$(function() {
div = $('<div />');
div.text('test');
div.hide(0);
div.appendto('body');
});
</script>
Lorsque je l'exécute, le DIV s'affiche. Au cas où je le cache (avant de l'ajouter au DOM). Le code suivant :
<script>
$(function() {
div = $('<div />');
div.text('test');
div.hide();
div.appendto('body');
});
</script>
hace cacher le DIV.
Quand je vais dans le code source de jQuery pour la fonction hide, je vois ceci :
hide: function( speed, easing, callback ) {
if ( speed || speed === 0 ) {
return this.animate( genFx("hide", 3), speed, easing, callback);
} else {
for ( var i = 0, j = this.length; i < j; i++ ) {
var display = jQuery.css( this[i], "display" );
if ( display !== "none" ) {
jQuery.data( this[i], "olddisplay", display );
}
}
// Set the display of the elements in a second loop
// to avoid the constant reflow
for ( i = 0; i < j; i++ ) {
this[i].style.display = "none";
}
return this;
}
},
Pourquoi vérifie-t-on
if ( speed || speed === 0 ) {
En particulier le, speed === 0. Je suppose que, lorsque la vitesse est nulle. On peut sauter la fonction animate entièrement et juste ajouter le display : none ; à l'élément.
ps. Je suppose que puisque nous donnons un élément qui n'existe pas dans le dom à la fonction animate, elle échoue tout simplement. Il n'y a rien à animer. Ainsi, la fonction animate ne cache pas réellement le DIV.
Merci pour toute réponse en avant :) J'ai cherché pendant environ 10 minutes la syntaxe correcte (hide()) au lieu de hide(0)) mais j'ai toujours trouvé cela illogique. D'où la question :)