Article de reference

jQuery

jQuery est une bibliothèque JavaScript conçue pour simplifier la navigation et la manipulation de l'arborescence DOM HTML , ainsi que la gestion des événements , les animations ...

jQuery est une bibliothèque JavaScript conçue pour simplifier la navigation et la manipulation de l'arborescence DOM HTML , ainsi que la gestion des événements , les animations CSS et Ajax . Il s'agit d'un logiciel libre et open source utilisant la licence permissive MIT . En août 2022 , jQuery est utilisé par 77 % des 10 millions de sites Web les plus populaires. Web indique qu'il s'agit de la bibliothèque JavaScript la plus largement déployée, avec une utilisation au moins trois à quatre fois supérieure à celle de toute autre bibliothèque JavaScript.

La syntaxe de jQuery est conçue pour faciliter la navigation dans un document, la sélection d'éléments DOM , la création d'animations , la gestion d'événements et le développement d'applications Ajax . jQuery offre également aux développeurs des fonctionnalités leur permettant de créer des plug-ins sur la bibliothèque JavaScript. Cela permet aux développeurs de créer des abstractions pour les interactions et animations de bas niveau, des effets avancés et des widgets de haut niveau pouvant être créés avec des thèmes. L'approche modulaire de la bibliothèque jQuery permet la création de pages Web dynamiques et d'applications Web puissantes .

L'ensemble des fonctionnalités de base de jQuery (sélections, parcours et manipulation d'éléments DOM) activées par son moteur de sélection (nommé « Sizzle » à partir de la version 1.3), a créé un nouveau « style de programmation », fusionnant algorithmes et structures de données DOM. Ce style a influencé l'architecture d'autres frameworks JavaScript comme YUI v3 et Dojo , stimulant plus tard la création de l' API Selectors standard .

Microsoft et Nokia intègrent jQuery sur leurs plateformes. Microsoft l'inclut dans Visual Studio ASP.NET AJAX et ASP.NET MVC de Microsoft tandis que Nokia l'a intégré dans la plateforme de développement de widgets Web Run-Time.

Aperçu

jQuery est à la base une bibliothèque de manipulation de Document Object Model (DOM). Le DOM est une représentation arborescente de tous les éléments d'une page Web. jQuery simplifie la syntaxe de recherche, de sélection et de manipulation de ces éléments DOM. Par exemple, jQuery peut être utilisé pour rechercher un élément dans le document avec une certaine propriété (par exemple tous les éléments avec la h1balise), modifier un ou plusieurs de ses attributs (par exemple color, visibility) ou le faire réagir à un événement (par exemple un clic de souris).

jQuery fournit également un paradigme de gestion des événements qui va au-delà de la sélection et de la manipulation d'éléments DOM de base. L'affectation d'événements et la définition de la fonction de rappel d'événements se font en une seule étape dans un seul emplacement du code. jQuery vise également à intégrer d'autres fonctionnalités JavaScript très utilisées (par exemple, les fondus entrants et sortants lors du masquage d'éléments, les animations en manipulant les propriétés CSS ).

Les principes de développement avec jQuery sont :

  • Séparation de JavaScript et HTML : la bibliothèque jQuery fournit une syntaxe simple pour ajouter des gestionnaires d'événements au DOM à l'aide de JavaScript, plutôt que d'ajouter des attributs d'événements HTML pour appeler des fonctions JavaScript. Ainsi, elle encourage les développeurs à séparer complètement le code JavaScript du balisage HTML.
  • Concision et clarté : jQuery favorise la concision et la clarté avec des fonctionnalités telles que les fonctions « chaînables » et les noms de fonctions abrégés.
  • Élimination des incompatibilités entre navigateurs : les moteurs JavaScript des différents navigateurs diffèrent légèrement, de sorte que le code JavaScript qui fonctionne pour un navigateur peut ne pas fonctionner pour un autre. Comme d'autres boîtes à outils JavaScript, jQuery gère toutes ces incohérences entre navigateurs et fournit une interface cohérente qui fonctionne sur différents navigateurs.
  • Extensibilité : de nouveaux événements, éléments et méthodes peuvent être facilement ajoutés puis réutilisés en tant que plugin.

Histoire

jQuery a été créé à l'origine en janvier 2006 au BarCamp NYC par John Resig , influencé par la bibliothèque cssQuery antérieure de Dean Edwards. Il est actuellement maintenu par une équipe de développeurs dirigée par Timmy Willison (le moteur de sélection jQuery, Sizzle, étant dirigé par Richard Gibson).

jQuery était à l'origine sous licence CC BY-SA 2.5 , et sous licence MIT en 2006. À la fin de 2006, il était sous licence GPL et MIT. Comme cela a entraîné une certaine confusion, la GPL a été abandonnée en 2012 et n'est désormais sous licence que sous licence MIT.

Popularité

  • En 2015, jQuery était utilisé sur 62,7 % du million de sites Web les plus visités (selon BuiltWith) et sur 17 % de tous les sites Web Internet.
  • En 2017, jQuery était utilisé sur 69,2 % du million de sites Web les plus visités (selon Libscore).
  • En 2018, jQuery était utilisé sur 78 % du million de sites Web les plus visités.
  • En 2019, jQuery était utilisé sur 80 % du million de sites Web les plus visités (selon BuiltWith), et 74,1 % du million de sites Web les plus visités (selon W3Techs).
  • En 2021, jQuery était utilisé sur 77,8 % des 10 millions de sites Web les plus visités (selon W3Techs) .

Caractéristiques

jQuery inclut les fonctionnalités suivantes :

  • Sélections d'éléments DOM à l'aide du moteur de sélection open source multi-navigateur Sizzle , un spin-off du projet jQuery
  • Manipulation DOM basée sur des sélecteurs CSS qui utilisent les noms et les attributs des éléments, tels que l'identifiant et la classe, comme critères pour sélectionner les nœuds dans le DOM
  • Événements
  • Effets et animations
  • Ajax
  • Objets Deferred et Promise pour contrôler le traitement asynchrone
  • Analyse JSON
  • Extensibilité grâce aux plug-ins
  • Utilitaires, tels que la détection de fonctionnalités
  • Méthodes de compatibilité disponibles nativement dans les navigateurs modernes, mais nécessitant des solutions de secours pour les anciens navigateurs, tels que jQuery.inArray()et jQuery.each().
  • Prise en charge multi -navigateur

Prise en charge du navigateur

jQuery 3.0 et les versions ultérieures prennent en charge les « versions actuelles-1 » (c'est-à-dire la version stable actuelle du navigateur et la version qui l'a précédée) de Firefox (et ESR), Chrome , Safari et Edge ainsi qu'Internet Explorer 9 et les versions ultérieures. Sur mobile, il prend en charge iOS 7 et les versions ultérieures, ainsi qu'Android 4.0 et les versions ultérieures.

Distribution

La bibliothèque jQuery est généralement distribuée sous la forme d'un seul fichier JavaScript qui définit toutes ses interfaces, y compris les fonctions DOM, Events et Ajax. Elle peut être incluse dans une page Web en créant un lien vers une copie locale ou en créant un lien vers l'une des nombreuses copies disponibles sur les serveurs publics. jQuery dispose d'un réseau de diffusion de contenu (CDN) hébergé par MaxCDN . Google dans le service Google Hosted Libraries et Microsoft hébergent également la bibliothèque.

Exemple de liaison d'une copie de la bibliothèque localement (à partir du même serveur qui héberge la page Web) :

< script 
src = "jquery-3.5.1.min.js" ></ script >

Exemple de liaison d'une copie de la bibliothèque à partir du CDN public de jQuery :

< script 
src = "https://code.jquery.com/jquery-3.5.1.min.js" 
integrity = "sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" 
crossorigin = "anonymous" ></ script >

Interface

Fonctions

jQuery propose deux types de fonctions , les fonctions utilitaires statiques et les méthodes d'objet jQuery . Chacune d'entre elles possède son propre style d'utilisation.

Les deux sont accessibles via l'identifiant principal de jQuery : jQuery. Cet identifiant a un alias nommé $. Toutes les fonctions sont accessibles via l'un de ces deux noms.

Méthodes jQuery

La jQueryfonction est une fabrique permettant de créer un objet jQuery qui représente un ou plusieurs nœuds DOM. Les objets jQuery ont des méthodes pour manipuler ces nœuds. Ces méthodes (parfois appelées commandes) sont chaînables car chaque méthode renvoie également un objet jQuery.

L'accès et la manipulation de plusieurs nœuds DOM dans jQuery commencent généralement par l'appel de la $fonction avec une chaîne de sélecteur CSS. Cela renvoie un objet jQuery référençant tous les éléments correspondants dans la page HTML$("div.test") . , par exemple, renvoie un objet jQuery avec tous les divéléments qui ont la classe test. Cet ensemble de nœuds peut être manipulé en appelant des méthodes sur l'objet jQuery renvoyé.

Utilitaires statiques

Il s'agit de fonctions utilitaires qui n'agissent pas directement sur un objet jQuery. Elles sont accessibles en tant que méthodes statiques sur l'identifiant jQuery ou $. Par exemple, $.ajax()est une méthode statique.

Mode sans conflit

jQuery fournit une $.noConflict()fonction qui renonce au contrôle du $nom. Ceci est utile si jQuery est utilisé sur une page Web liant également une autre bibliothèque qui exige le $symbole comme identifiant. En mode sans conflit, les développeurs peuvent l'utiliser jQuerycomme remplacement $sans perdre de fonctionnalité.

Point de départ typique

En général, jQuery est utilisé en plaçant le code d'initialisation et les fonctions de gestion des événements dans . Ceci est déclenché par jQuery lorsque le navigateur a terminé de construire le DOM pour la page Web actuelle. $(handler)

$ ( function () { // Cette fonction anonyme est appelée lorsque la page a terminé son chargement. // Ici, on peut placer du code pour créer des objets jQuery, gérer des événements, etc. });

ou

$ ( fn ); // La fonction nommée fn, définie ailleurs, est appelée lorsque la page est chargée.

Historiquement, $(document).ready(callback)il s'agit de l'idiome de facto pour exécuter du code une fois que le DOM est prêt. Cependant, depuis jQuery 3.0, les développeurs sont encouragés à utiliser $(handler)à la place la signature beaucoup plus courte.

Enchaînement

Les méthodes d'objet jQuery renvoient généralement également un objet jQuery, ce qui permet l'utilisation de chaînes de méthodes :

$ ( 'div.test' ) 
. on ( 'click' , handleTestClick ) . addClass ( 'foo' );

Cette ligne recherche tous div les éléments avec l'attribut de classe test, puis enregistre un gestionnaire d'événements sur chaque élément pour l'événement « clic », puis ajoute l'attribut de classe fooà chaque élément.

Certaines méthodes d'objet jQuery récupèrent des valeurs spécifiques (au lieu de modifier un état). Un exemple de cela est la val()méthode , qui renvoie la valeur actuelle d'un élément de saisie de texte . Dans ces cas, une instruction telle que $('#user-email').val()ne peut pas être utilisée pour le chaînage car la valeur de retour ne fait pas référence à un objet jQuery.

Créer de nouveaux éléments DOM

Outre l'accès aux nœuds DOM existants via jQuery, il est également possible de créer de nouveaux nœuds DOM, si la chaîne transmise en tant qu'argument à $()factory ressemble à du HTML. Par exemple, le code ci-dessous recherche un selectélément HTML et crée un nouvel optionélément avec la valeur VAGet l'étiquette Volkswagen, qui est ensuite ajouté au menu de sélection :

$ ( 'select#car-brands' ) 
. append ( $ ( '<option>' ) . prop ( valeur , "VAG" ) . text ( 'Volkswagen' ) );

Ajax

Il est possible d'effectuer des requêtes Ajax (avec prise en charge multi-navigateurs ) $.ajax()pour charger et manipuler des données distantes.

$ . ajax ({ 
type : 'POST' , url : '/process/submit.php' , data : { name : 'John' , location : 'Boston' , }, }). then ( function ( msg ) { alert ( 'Données enregistrées : ' + msg ); }). catch ( function ( xmlHttpRequest , statusText , errorThrown ) { alert ( 'Votre soumission de formulaire a échoué. ' + 'Requête HTTP XML : ' + JSON . stringify ( xmlHttpRequest ) + ', Texte d'état : ' + statusText + ', Erreur générée : ' + errorThrown ); });

Cet exemple publie les données name=Johnsur location=Bostonle /process/submit.phpserveur. Lorsque cette requête se termine, la fonction de réussite est appelée pour alerter l'utilisateur. Si la requête échoue, elle avertit l'utilisateur de l'échec, du statut de la requête et de l'erreur spécifique.

L'exemple ci-dessus utilise les méthodes .then()et .catch()pour enregistrer les rappels qui s'exécutent lorsque la réponse est terminée. Ces rappels de promesse doivent être utilisés en raison de la nature asynchrone des requêtes Ajax .

Plugins jQuery

L'architecture de jQuery permet aux développeurs de créer du code de plug-in pour étendre ses fonctions. Il existe des milliers de plug-ins jQuery disponibles sur le Web qui couvrent une gamme de fonctions, telles que les aides Ajax, les services Web , les grilles de données, les listes dynamiques, les outils XML et XSLT , le glisser-déposer , les événements, la gestion des cookies et les fenêtres modales .

Une source importante de plug-ins jQuery est le sous-domaine des plugins du site Web du projet jQuery. Les plugins de ce sous-domaine ont cependant été supprimés accidentellement en décembre 2011 dans le but de débarrasser le site du spam. Le nouveau site est un référentiel hébergé sur GitHub , qui oblige les développeurs à soumettre à nouveau leurs plugins et à se conformer aux nouvelles exigences de soumission. jQuery fournit un « centre d'apprentissage » qui peut aider les utilisateurs à comprendre JavaScript et à commencer à développer des plugins jQuery.

Historique des versions

Version Version initiale Dernière mise à jour Taille minifiée (Ko) Notes complémentaires
1.0 26 août 2006 ( 2006-08-26 ) Première version stable
1.1 14 janvier 2007 ( 2007-01-14 )
1.2 10 septembre 2007 ( 2007-09-10 ) 1.2.6 54,5
1.3 14 janvier 2009 ( 2009-01-14 ) 1.3.2 55,9 Le moteur de sélection Sizzle introduit dans le noyau
1.4 14 janvier 2010 ( 2010-01-14 ) 1.4.4 76,7
1,5 31 janvier 2011 ( 31/01/2011 ) 1.5.2 83,9 Gestion des rappels différés, réécriture du module ajax
1.6 3 mai 2011 ( 03/05/2011 ) 1.6.4 (12 septembre 2011 ) ( 2011-09-12 ) 89,5 Améliorations significatives des performances des fonctions attr() et val()
1.7 3 novembre 2011 ( 2011-11-03 ) 1.7.2 (21 mars 2012 ) (2012-03-21) 92,6 Nouvelles API d'événements : .on() et .off(), tandis que les anciennes API sont toujours prises en charge.
1.8 9 août 2012 (2012-08-09) 1.8.3 (13 novembre 2012 ) (2012-11-13) 91,4 Moteur de sélection Sizzle réécrit, animations améliorées et flexibilité $(html, props).
1.9 15 janvier 2013 (2013-01-15) 1.9.1 (4 février 2013 ) (2013-02-04) 90,5 Suppression des interfaces obsolètes et nettoyage du code
1.10 24 mai 2013 (2013-05-24) 1.10.2 (3 juillet 2013 ) (2013-07-03) 90,9 Corrections de bogues intégrées et différences signalées à partir des cycles bêta 1.9 et 2.0
1.11 24 janvier 2014 (2014-01-24) 1.11.3 (28 avril 2015 ) (2015-04-28) 93,7
1.12 8 janvier 2016 (2016-01-08) 1.12.4 (20 mai 2016 ) (2016-05-20) 94,9
2.0 18 avril 2013 (2013-04-18) 2.0.3 (3 juillet 2013 ) (2013-07-03) 81,7 Abandon de la prise en charge d'IE 6 à 8 pour améliorer les performances et réduire la taille des fichiers
2.1 24 janvier 2014 (2014-01-24) 2.1.4 (28 avril 2015 ) (2015-04-28) 82,4
2.2 8 janvier 2016 (2016-01-08) 2.2.4 (20 mai 2016 ) (2016-05-20) 83,6
3.0 9 juin 2016 (2016-06-09) 3.0.0 (9 juin 2016 ) (2016-06-09) 84,3 Prise en charge des promesses/A+ pour les différés, $.ajax et $.when, .data() compatible HTML5
3.1 7 juillet 2016 (2016-07-07) 3.1.1 (23 septembre 2016 ) (2016-09-23) 84,7 jQuery.readyException ajouté, les erreurs du gestionnaire de préparation ne sont désormais plus réduites au silence
3.2 16 mars 2017 (2017-03-16) 3.2.1 (20 mars 2017 ) (2017-03-20) 84,6 Ajout de la prise en charge de la récupération du contenu des <template>éléments et abandon de diverses anciennes méthodes.
3.3 19 janvier 2018 (2018-01-19) 3.3.1 (20 janvier 2018 ) (2018-01-20) 84,9 Obsolescence des anciennes fonctions, les fonctions qui acceptent les classes les prennent désormais également en charge au format tableau.
3.4 10 avril 2019 (2019-04-10) 3.4.1 (1er mai 2019) 86.1 Améliorations des performances nonceet nomodulesupport, correctifs pour les éléments radio, un correctif de sécurité mineur.
3.5 10 avril 2020 (2020-04-10) 3.5.1 (4 mai 2020) 87,4 Correctifs de sécurité .even()et .odd()méthodes jQuery.trimobsolètes
3.6 2 mars 2021 (2021-03-02) 3.6.4 (8 mars 2023) 88,2 Corrections de bugs, retour JSON en cas d'erreur JSONP, gestion des nouveaux sélecteurs Chrome
3.7 11 mai 2023 (2023-05-11) 3.7.1 (28 août 2023) 85,4 .uniqueSort()méthode, améliorations des performances .outerWidth(true)et .outerHeight(true)gestion des marges négatives, corrections de focus
4.0 6 février 2024 (2024-02-06) 4.0.0-beta.2 78,8 Prise en charge d'IE11 abandonnée, API obsolètes supprimées, méthodes de tableau supprimées, ordre des événements de focus modifié, prise en charge de FormData, migration vers les modules ES

Cadre de test

QUnit est un framework d'automatisation de tests utilisé pour tester le projet jQuery. L'équipe jQuery l'a développé comme une bibliothèque de tests unitaires interne. L'équipe jQuery l'utilise pour tester son code et ses plugins, mais il peut tester n'importe quel code JavaScript générique, y compris le code JavaScript côté serveur.

Depuis 2011 , l'équipe de test jQuery utilise QUnit avec TestSwarm pour tester chaque version de la base de code jQuery.

Alternatives à jQuery

En simplifiant des tâches telles que la navigation dans les documents HTML, l’animation et la gestion des événements, la bibliothèque JavaScript jQuery a changé le visage du développement Web. En mai 2019 , jQuery était toujours utilisé dans 74 % des sites Web connus, selon l’enquêteur sur les technologies Web W3Techs. Néanmoins, la bibliothèque jQuery, qui a fait ses débuts en août 2006, est désormais considérée par certains développeurs comme une technologie plus ancienne dont le temps est révolu. Des alternatives à jQuery ont émergé ces dernières années, comme la bibliothèque Cash ou même simplement le JavaScript moderne et classique, maintenant que tous les navigateurs Web gèrent JavaScript de la même manière et que jQuery n’est plus nécessaire pour résoudre les problèmes de compatibilité. Les arguments sur Reddit et les vidéos sur YouTube montrent que jQuery est devenu obsolète, ou du moins n’est plus aussi essentiel qu’il l’était autrefois.

—  Paul Krill, InfoWorld (2019)

La compatibilité entre navigateurs n'étant plus un problème majeur, la plupart des jQuery peuvent désormais être remplacés par des normes Web modernes, sans perte de commodité. C'est en partie pour cette raison que GitHub a supprimé jQuery de ses pages en 2018.