💲 jQuery – "Write Less, Do More"
Guide complet IDEO-Lab : Sélecteurs, DOM, CSS, Événements, Effets & AJAX.
Vue d'ensemble
Bibliothèque JS (pas un framework). "Write Less, Do More".
Bibliothèque DOMPourquoi jQuery ? (Historique)
Abstrait les incompatibilités navigateurs (IE, Netscape).
Cross-browser IE6Installation (CDN & npm)
<script> (CDN) ou npm install jquery. Versions (slim/full).
$(document).ready()
Le point d'entrée. Attendre que le DOM soit chargé. $().
Sélecteurs $()
Le cœur de jQuery. $("#id"), $(".class"), $("p").
DOM Traversal (Parcours)
.find(), .parent(), .next(), .children(), .closest().
DOM Get/Set (Contenu)
.html(), .text() (Contenu), .val() (Formulaires).
DOM Manipulation
.append(), .prepend(), .remove(), .attr().
CSS (Styles)
Lecture et écriture de styles inline avec .css().
CSS (Classes)
.addClass(), .removeClass(), .toggleClass().
Événements (.on())
.on('click', ...). (Anciennement .click(), .hover()).
Événements (Délégation)
Gestion des éléments futurs/dynamiques. .on(e, sel, fn).
Effets & Animations
.hide(), .fadeIn(), .slideDown(), .animate().
Chaining (Chaînage)
L'API "fluide". $(...).find(...).addClass(...).
📡 AJAX ($.ajax)
La méthode $.ajax() (complète) pour les requêtes HTTP.
📡 AJAX (Raccourcis)
$.get(), $.post(), $.getJSON() pour les cas simples.
Vitrine (Qui l'utilise ?)
WordPress, Drupal, Magento. (Legacy : GitHub, Stack Overflow).
WordPress CMSLiens Utiles
Documentation (API), Centre d'apprentissage, CDN.
API Docs FormationjQuery vs Vanilla JS (ES6+)
$() vs querySelector. $.ajax vs fetch.
Cheat-sheet
Syntaxe des sélecteurs, événements et AJAX.
cheat SélecteursQu'est-ce que jQuery ?
jQuery est une **bibliothèque (library)** JavaScript, rapide, petite et riche en fonctionnalités. Ce n'est *pas* un framework (comme React ou Vue).
Son slogan était : **"Write Less, Do More"** (Écrire moins, pour en faire plus).
Son objectif principal est de simplifier radicalement :
- La manipulation du DOM (HTML).
- La gestion des événements (clics, etc.).
- Les animations.
- Les requêtes AJAX (Appels réseau).
Flux de travail (Simplifié)
L'idée de jQuery est de "wrapper" (envelopper) les éléments du DOM dans un objet spécial (l'objet jQuery, $) qui expose des méthodes simples et puissantes.
// 1. Sélectionner un élément (via CSS)
const monElement = $("#mon-id");
// 2. Agir dessus (ex: cacher)
monElement.hide();
// 3. Agir (ex: ajouter une classe)
monElement.addClass("actif");
// 4. Écouter (ex: clic)
monElement.on("click", function() {
console.log("Clic !");
});
Le Problème (La "Guerre des Navigateurs")
Dans les années 2000, (Internet Explorer 6/7/8, Firefox, Netscape, Opera) implémentaient JavaScript de manière **incompatible**.
Pour faire la *même chose* (ex: un appel AJAX ou ajouter un événement), il fallait écrire du code différent pour chaque navigateur. C'était un cauchemar.
// (Exemple: Ajouter un événement en "Vanilla JS" ancien)
if (element.addEventListener) {
// Navigateurs modernes (W3C)
element.addEventListener("click", maFonction, false);
} else if (element.attachEvent) {
// Internet Explorer (non-standard)
element.attachEvent("onclick", maFonction);
} else {
// Très vieux...
element.onclick = maFonction;
}
La Solution (Une API unifiée)
jQuery (créé par John Resig en 2006) a fourni une **couche d'abstraction**.
Le développeur n'écrivait qu'une seule ligne (simple), et jQuery s'occupait de détecter le navigateur et d'exécuter le "mauvais" code (addEventListener, attachEvent, etc.) à sa place.
// (L'équivalent avec jQuery)
// Fonctionne sur TOUS les navigateurs,
// y compris IE6.
$("#mon-element").on("click", maFonction);
// (jQuery gérait aussi les différences
// sur la sélection (getElementById vs...),
// les animations, et surtout AJAX (XHR))
CDN (Content Delivery Network)
C'est la méthode la plus simple. Placer la balise <script> à la fin du <body>, avant votre propre script.
npm / Local (Pour les build tools)
Si vous utilisez un "bundler" (Webpack, Vite, Rollup), vous installez jQuery via npm.
# 1. Installer via npm
npm install jquery
# 2. Importer dans votre JS (main.js)
import $ from 'jquery';
// ou (si type="module" n'est pas géré)
// const $ = require('jquery');
// (Désormais $ est disponible dans votre module)
$(function() {
console.log("jQuery importé via npm !");
});
Vérification
Comment savoir si jQuery est bien chargé sur la page ?
// 1. Dans la console du navigateur
window.jQuery
// ou
$
// (Si jQuery est chargé, cela retournera la fonction jQuery)
// (Si undefined, il y a une erreur de chargement)
// 2. Vérifier la version
if (window.jQuery) {
console.log("jQuery version: " + $.fn.jquery);
} else {
console.error("jQuery n'est pas chargé !");
}
$(document).ready() est un "wrapper" qui garantit que votre code ne s'exécutera que lorsque le **DOM est prêt** (HTML chargé), sans attendre les images (contrairement à window.onload).
Syntaxe (Longue)
// (Dans app.js)
$(document).ready(function() {
// (Tout votre code jQuery va ici)
console.log("Le DOM est prêt !");
$("#mon-bouton").on("click", function() { alert("Clic !"); });
});
Syntaxe (Raccourci) (Recommandée)
Ce raccourci est le plus courant :
// (Dans app.js)
$(function() {
// (C'est l'exact équivalent de $(document).ready())
console.log("Le DOM est prêt (raccourci) !");
});
Le $ (alias de jQuery) est le cœur de la bibliothèque. C'est une fonction qui "sélectionne" des éléments du DOM en utilisant la syntaxe des **sélecteurs CSS**.
Elle retourne un "objet jQuery" (une collection d'éléments).
// 1. Sélection par ID
const titre = $("#main-title"); // (Un seul élément)
// 2. Sélection par Classe
const items = $(".list-item"); // (Plusieurs éléments)
// 3. Sélection par Tag (Type)
const paragraphes = $("p");
// 4. Sélection complexe (CSS)
const premierItem = $("ul.ma-liste > li:first-child");
// 5. Sélection multiple
const inputs = $("input, textarea, select");
// 6. Sélecteurs jQuery (non-CSS)
const inputsActifs = $(":input:enabled");
const headers = $(":header"); // (h1, h2, h3...)
Une fois un (ou plusieurs) élément(s) sélectionné(s), on peut "naviguer" dans le DOM par rapport à cet élément.
// (On part de l'élément cliqué)
$("button").on("click", function() {
// 'this' est le bouton cliqué
// $(this) "l'enveloppe" en objet jQuery
const $btn = $(this);
// 1. Trouver un enfant (ex: une icône )
const $icon = $btn.find("i");
// 2. Trouver l'élément 'parent'
const $parentDiv = $btn.parent();
// 3. Trouver le parent le plus proche (ex: un formulaire)
const $form = $btn.closest("form");
// 4. Trouver l'élément "frère" (sibling) suivant
const $nextEl = $btn.next();
// 5. Trouver tous les frères
const $siblings = $btn.siblings(".une-classe");
// (Ex: Mettre en surbrillance le form)
$form.css("border", "1px solid red");
});
jQuery utilise les mêmes fonctions pour lire (GET) et écrire (SET) des propriétés. Si on passe un argument, c'est un SET. Si on n'en passe pas, c'est un GET (sur le 1er élément de la collection).
.html() (Contenu HTML)
// GET (Lecture)
const contenuHtml = $("#mon-div").html();
// SET (Écriture)
$(".alerte").html("Erreur !");
.text() (Contenu Texte)
// GET
const contenuTexte = $("#mon-div").text();
// SET
$(".alerte").text("Erreur !"); // (Sécurisé, encode le HTML)
.val() (Formulaires)
// GET (Valeur d'un input, select, textarea)
const nomUtilisateur = $("#input-nom").val();
// SET
$("#input-nom").val("Valeur par défaut");
Ajout & Suppression
const $liste = $("ul#ma-liste");
const $element = $("li.item-3");
// 1. Ajouter (à l'intérieur)
$liste.append(""); // (Avant l'UL) $liste.after("
"); // (Après l'UL) // 3. Supprimer $element.remove(); // (Supprime l'Item 3) // 4. Vider $liste.empty(); // (Supprime les enfants de l'UL)
Attributs (.attr())
const $lien = $("a#mon-lien");
const $img = $("img");
// GET
const url = $lien.attr("href");
const alt = $img.attr("alt");
// SET (1 attribut)
$lien.attr("href", "https://nouveau-lien.com");
// SET (Multiples attributs)
$img.attr({
src: "image.png",
alt: "Texte alternatif",
title: "Titre"
});
// Supprimer un attribut
$img.removeAttr("title");
.css())La méthode .css() permet de lire ou modifier les styles CSS "inline" d'un élément (ce qui est dans l'attribut style="...").
Note : Il est généralement préférable d'utiliser des classes (voir 3.2) plutôt que de manipuler les styles directement.
1. GET (Lire un style)
// (Retourne la valeur *calculée* par le navigateur)
const couleur = $("h1").css("color");
const fontSize = $("h1").css("font-size");
console.log(couleur); // ex: "rgb(51, 51, 51)"
2. SET (Écrire des styles)
// SET (1 propriété)
// (Utiliser camelCase pour les propriétés composées)
$("h1").css("backgroundColor", "#f0f0f0");
// SET (Multiples propriétés, via objet)
$("h1").css({
"font-size": "24px", // (Avec quotes)
fontWeight: "bold", // (Sans quotes si camelCase)
"border-bottom": "1px solid blue"
});
La **meilleure pratique** pour modifier l'apparence d'un élément est de modifier ses classes CSS (définies dans votre fichier .css) plutôt que ses styles inline.
.addClass() (Ajouter)
// (CSS: .menu-ouvert { background: blue; })
$("#menu").addClass("menu-ouvert");
// (Ajouter plusieurs classes)
$("#menu").addClass("menu-ouvert transition");
.removeClass() (Supprimer)
$("#menu").removeClass("transition");
.toggleClass() (Basculer)
Ajoute la classe si elle est absente, la supprime si elle est présente. Parfait pour les menus, les "likes", etc.
$("#bouton-menu").on("click", function() {
$("#menu").toggleClass("menu-ouvert");
});
.hasClass() (Vérifier)
if ($("#menu").hasClass("menu-ouvert")) {
// ...
}
.on()).on() est la méthode universelle (depuis jQuery 1.7) pour lier des événements (click, mouseenter, submit, keydown...).
Cette modal couvre la **Liaison Directe** (sur les éléments qui existent au chargement de la page).
Syntaxe
// 1. Événement 'click'
$("#mon-bouton").on("click", function(event) {
// Annuler le comportement par défaut (ex: submit)
event.preventDefault();
// 'this' est l'élément DOM (le bouton)
// $(this) est l'objet jQuery du bouton
$(this).text("Cliqué !");
});
// 2. Événement 'submit' (sur un formulaire)
$("#mon-form").on("submit", function(e) {
e.preventDefault(); // Empêche le rechargement de la page
const data = $(this).serialize(); // (Helper jQuery pour formulaires)
console.log(data);
});
// 3. Événements multiples
$("#mon-input").on("focus blur", function() {
$(this).toggleClass("input-focus");
});
Problème : Si vous ajoutez un élément (
ne réagira pas au clic.Solution (Délégation) : On écoute sur un parent (ex:
- ) qui *existe déjà*, et on "filtre" pour les enfants (
) qui déclenchent l'événement.Syntaxe :
.on(evenement, selecteur, fonction)// (HTML:
- ...
- ) $("#ma-liste").on("click", "li", function() { // 'this' est le
- cliqué $(this).remove(); }); // 2. Le code qui ajoute des éléments $("#ajouter").on("click", function() { // Cet item sera cliquable, // grâce à la délégation ! $("#ma-liste").append("
- Nouvel item (cliquable) "); });
) *après* avoir lié les événements, le nouvel Effets (show/hide, slide, fade)
Méthodes simples pour les animations courantes.
const $box = $("#ma-boite");
// Cacher (instantané)
$box.hide();
// Afficher (instantané)
$box.show();
// Cacher/Afficher (en 400ms)
$box.toggle(400);
// Slide (ex: accordeon)
$("#menu").slideToggle(200);
// Fondu (ex: alerte)
$("#alerte").fadeOut(1000, function() {
// (Callback: exécuté à la fin)
$(this).remove();
});
.animate()
Pour animer des propriétés CSS numériques.
$("#mon-bloc").on("click", function() {
$(this).animate(
{
// Propriétés CSS
opacity: 0.25,
left: "+=50px", // Relatif
height: "toggle"
},
1000, // Durée
function() {
// Callback (fin)
console.log("Animation finie !");
}
);
});
La plupart des méthodes jQuery (manipulation, effets) retournent l'objet jQuery lui-même. Cela permet le "chaînage" (chaining) : appeler des méthodes les unes après les autres sur le même set d'éléments.
Avec Chaining (Concise)
$("#menu")
.addClass("actif")
.slideDown(500)
.css("background-color", "blue");
// (Attention: les méthodes "Getters"
// (ex: .html(), .css('color'))
// cassent la chaîne car elles retournent
// une valeur (string, number...))
.end() (Remonter la chaîne)
.end() permet de remonter dans la chaîne (ex: revenir au parent après un .find()).
$("#liste")
.find("li") // (La sélection est maintenant jQuery a révolutionné AJAX en masquant la complexité de XMLHttpRequest (cross-browser).
$.ajax() est la méthode "couteau-suisse" qui gère tout (GET, POST, etc.) via un objet de configuration. Elle retourne un objet "Deferred" (similaire à une Promise).
Exemple (POST avec .done/.fail)
const userData = { nom: "Alice", id: 123 };
const request = $.ajax({
url: "/api/users/update",
type: "POST", // (ou "GET", "PUT", "DELETE")
data: JSON.stringify(userData),
contentType: "application/json; charset=utf-8",
dataType: "json"
});
// (Style Promise)
request.done(function(response) {
console.log("Succès:", response);
});
request.fail(function(xhr, status, error) {
console.error("Échec:", error);
});
request.always(function() {
console.log("Requête terminée.");
});
Pour les cas simples (GET, POST), jQuery fournit des raccourcis très pratiques.
$.get() & $.getJSON()
// Raccourci pour $.ajax({ type: "GET", dataType: "json" })
// $.get(URL, [data], [callback_succes], [dataType]);
$.getJSON("/api/user/5", function(data) {
// (Callback de succès, data est déjà parsée)
console.log("Utilisateur:", data.nom);
});
// (Version GET avec .done() (style Promise))
$.get("/api/user/5")
.done(function(data) {
console.log("Utilisateur:", data.nom);
})
.fail(function() {
console.error("Erreur de chargement user");
});
$.post()
// $.post(URL, [data], [callback_succes], [dataType]);
const formData = { nom: "Bob" };
$.post("/api/users/create", formData)
.done(function(response) {
console.log("Utilisateur créé:", response.id);
});
jQuery est encore (en 2024-2025) la bibliothèque JavaScript la plus utilisée sur le web, principalement en raison de son inclusion massive dans les CMS et les thèmes "legacy".
| Plateforme / Site | Usage |
|---|---|
| WordPress | Le "backend" (Admin Dashboard) de WordPress dépend massivement de jQuery. La plupart des thèmes et plugins l'utilisent. |
| Drupal / Joomla! | Similaire à WordPress, ces CMS l'utilisent pour la manipulation du DOM dans leurs back-offices et thèmes. |
| Magento (Adobe Commerce) | La plateforme e-commerce utilise jQuery et jQuery UI pour de nombreuses interactions front-end. |
| Stack Overflow | (Legacy) Le site a été construit sur jQuery. (Ils migrent progressivement vers du JS natif). |
| GitHub | (Legacy) Utilisait intensivement jQuery. (Migre/a migré vers des Web Components et du JS natif). |
Ressources pour apprendre et travailler avec jQuery.
| Site | Description |
|---|---|
| jQuery.com (Site Officiel) | Pour les téléchargements ("Download"), les articles de blog et les annonces. |
| api.jquery.com | La **référence N°1**. La documentation officielle de l'API. C'est ici que l'on vérifie chaque méthode. |
| learn.jquery.com | Le "Learning Center" officiel, avec des tutoriels et des explications sur les concepts de base. |
| code.jquery.com | Le CDN officiel pour copier/coller les liens <script> (voir modal 1.3). |
| jQuery UI | Bibliothèque complémentaire (maintenant dépréciée/legacy) pour les widgets (Datepicker, Dialog, Accordion). |
"jQuery est-il mort ?" Non, mais il est **moins nécessaire**. Les navigateurs modernes (ES6+) ont adopté des API simples, standardisées, inspirées par jQuery.
Le JavaScript "Vanilla" (natif) est désormais souvent plus performant et ne nécessite pas de charger une bibliothèque de 30ko (minifiée/gzippée).
| Tâche | jQuery | JavaScript (ES6+ "Vanilla") |
|---|---|---|
| Sélecteur | $("#id") | document.querySelector("#id") |
| Sélecteurs Multiples | $(".item") | document.querySelectorAll(".item") |
| Ajouter Classe | $el.addClass("foo") | el.classList.add("foo") |
| Changer HTML | $el.html("...") | el.innerHTML = "..." |
| Événement | $el.on("click", fn) | el.addEventListener("click", fn) |
| AJAX (GET) | $.get(url, fn) | fetch(url).then(r => r.json()).then(fn) |
Sélecteurs & Parcours
// Wrapper (attendre le DOM)
$(function() {
// ... code ici ...
});
// Sélecteurs
const $el = $("#id");
const $els = $(".class");
// Parcours
$el.find(".enfant");
$el.parent();
$el.closest("form");
$el.next(); // Frère suivant
Manipulation & CSS
// Get/Set
$el.html("Contenu");
$el.val("Input val");
$el.attr("href", "url");
// CSS
$el.css("color", "red");
$el.addClass("foo");
$el.removeClass("bar");
$el.toggleClass("baz");
$el.hide(500);
Événements & AJAX
// Événement (Direct)
$el.on("click", function(e) {
e.preventDefault();
$(this); // L'élément cliqué
});
// Événement (Délégué)
$("ul").on("click", "li", function() {
// ...
});
// AJAX (GET)
$.getJSON("/api/data", data => {
console.log(data);
});
// AJAX (POST)
$.post("/api/save", { id: 1 }, res => {
console.log(res);
});
// AJAX (Complet)
$.ajax({
url: "/api/delete",
type: "DELETE",
}).done(() => {}).fail(() => {});
