Méthodes show() et hide()
La modification majeure - les règles CSS sont prioritaires - annoncée lors de la sortie de la version alpha est abandonnée, elle provoquait trop de problèmes. Pour les plugins, il était impossible d'avoir la certitude qu'un élément est visible. Malgré cet abandon, les modifications apportées dans le codage des méthodes show et hide améliorent nettement les performances.
Méthode data
Toutes les clés des attributs data-* sont converties au format « camelCase » pour être conformes à la norme HTML5 sur dataset. Exemples :
- la valeur de l'attribut HTML data="data-foo-bar" est accessible par $( selector ).data( "fooBar" ;
- la valeur de l'attribut HTML data="data-foo-42" est accessible par $( selector ).data( "foo42" ).
L'objet jQuery.Deferred est compatible avec la norme Promises/A+ (natif dans ES2015)
- Ce qui provoque plusieurs modifications dans l'usage de la méthode then().
- Lorsqu'une erreur (thrown) est déclenchée dans une méthode de rappel (callback), elle induit immédiatement le rejet de la promesse ;
- L'état d'un objet différé (deferred) créé par then() est soumis au comportement de ses méthodes de rappel. Le déclenchement d'une erreur provoque le rejet et les retours « non-thenable » deviennent des « valeurs d'accomplissement ».
Dans la norme Promises/A+, un « thenable » est un objet qui gère une promesse par la méthode then. Voir : le paragraphe 24.6.2 Resolving Q with thenables dans Exploring ES6. La source anglophone de cette annonce propose un exemple lumineux (sic) mettant en garde contre la différence de comportement entre l'ancien jQuery.Deferred et le nouveau.
On y voit le rejet d'un objet parent, le succès des objets enfants (child) avec affichage de « fulfilled bar » et le rejet d'un objet petits-enfants (grandchildren). Alors que dans la version précédente de jQuery.Deferred, nous avons le rejet d'un objet parent, l'affichage de « rejected bar » lors du rejet des objets enfants, et l'arrêt sur le déclenchement de l'erreur : throw new Error( "baz" ).
Comme je vous le disais, une fois qu'on l'a compris, cet exemple est tellement simpliste qu'il en est « lumineux ». - Toutes les fonctions de rappel sont asynchrones ;
- Une fonction de rappel de la méthode progress ne peut plus résoudre son objet différé.
- La méthode when a également été mise à jour pour accepter tout objet « thenable », ce qui inclut les Promise ES2015 ;
- La méthode catch() a été ajoutée à l'objet jQuery.Deferred comme un alias de la méthode then( null, fn ) ;
- Contrairement à ce qui avait été annoncé lors de la sortie de la version alpha, toutes les méthodes de l'objet différé jqXHR généré par une transaction AJAX continuent d'exister et aucune n'est obsolète.
Si votre requête est illogique, jQuery ne vous retournera plus une valeur plausible, mais une erreur. Les méthodes width(), height(), css(“width”) et css(“height”) retourneront les valeurs fournies par le navigateur sans les arrondir. Les alias d'événements obsolètes ont été supprimés : load, unload, et error n'existent plus. Vous devez utiliser la méthode on, exemple : on( "load", fn ). Sur les navigateurs non obsolètes, toutes les animations utilisent l'API requestAnimationFrame. Il faut aussi noter l'ajout de la méthode unwrap( selector ).
Grâce à Paul Irish travaillant chez Google, nous avons identifié certains cas où nous pourrions sauter un tas de travail supplémentaire lorsque certains sélecteurs personnalisés comme « :visible » ou « :hidden » sont utilisés plusieurs fois dans le même document. Dans ce cas particulier, nous sommes maintenant jusqu'à 17 fois plus rapides ! Mais souvenez-vous que dans le pire des cas, ces sélecteurs peuvent provoquer le calcul complet des styles et de la mise en page du document web.
Serveur de code (CDN jQuery)
- https://code.jquery.com/jquery-3.0.0-beta1.js
- https://code.jquery.com/jquery-3.0.0-beta1.min.js (version compressée)
Bientôt, la version 3.0 du plugin jQuery Migrate vous aidera à modifier vos codes existants.
Source
Et vous ?
Qu'en pensez-vous ?
Voir aussi :
jQuery 1.12.0 et 2.2.0 sont disponibles : corrections de bogues, amélioration des performances et ajout de quelques nouveautés