Module 5Manipuler jQuery
Chapitre 13 sur 15
Découvrir jQuery
Utiliser jQuery pour sélectionner, modifier, animer, gérer les événements et intégrer des plugins.
- ≈ 150 min
- 6 leçons
- 3 exercices
- TP
Module 5Manipuler jQuery
Chapitre 13 sur 15
Utiliser jQuery pour sélectionner, modifier, animer, gérer les événements et intégrer des plugins.
Objectifs
Avec ce chapitre, tu sauras…
$(sélecteur).action() et l'événement ready ;Leçon 1
| Méthode d'installation | Écriture | Usage |
|---|---|---|
| fichier téléchargé sur jquery.com | <script src="js/jquery-3.7.1.min.js"></script> | fonctionne sans Internet |
| CDN (Content Delivery Network) | <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script> | rien à télécharger, fichier souvent déjà en cache |
Leçon 2
| JavaScript pur | jQuery |
|---|---|
document.querySelectorAll("p").forEach(p => p.style.display = "none") | $("p").hide() |
document.querySelector("#titre").textContent = "Salut" | $("#titre").text("Salut") |
el.classList.add("actif") | $(el).addClass("actif") |
el.addEventListener("click", f) | $(el).on("click", f) |
Leçon 3
| Méthode | Lire | Modifier |
|---|---|---|
.text() | $("h1").text() | $("h1").text("Nouveau titre") |
.html() | $("#zone").html() | $("#zone").html("<b>Gras</b>") |
.val() | $("#nom").val() | $("#nom").val("") |
.attr() |
Leçon 4
| Besoin | jQuery |
|---|---|
| désactiver un lien | $(lien).removeAttr("href") |
| activer un lien | $(lien).attr("href", "url") |
| ouvrir dans un nouvel onglet | $(lien).attr("target", "_blank") |
| empêcher la navigation au clic, sans toucher au lien | $(lien).on("click", e => e.preventDefault()) |
Leçon 5
| Méthode | Rôle |
|---|---|
.on("click", f) | associer un gestionnaire (méthode générale, recommandée) |
.click(f), .dblclick(f), .mouseenter(f), .mouseleave(f), .keyup(f), .submit(f)… | raccourcis pour les événements courants |
.off("click") | retirer les gestionnaires |
.trigger("click") | déclencher l'événement par le code |
.on("click", "sélecteur", f) |
Leçon 6
.js (et son .css s'il en a un), ou utiliser son lien CDN.1$("p") est équivalent à…
2$(".item").hide() cache…
3$("#nom").val() sans argument…
4Le chaînage est possible car chaque méthode d'action renvoie…
5Pour déclencher un clic par le code :
6Un plugin jQuery doit être chargé…
7L'erreur « $ is not defined » signifie…
L'essentiel du chapitre
$(sélecteur).action() ; l'action s'applique à tous les éléments trouvés.$(function () { ... }) : le code s'exécute quand le DOM est prêt (ready)..text(), .html(), .val(), .attr(), .css() : lire sans argument, modifier avec ; .addClass(), .toggleClass(), .removeAttr().hide, show, toggle, fadeIn, fadeOut, slideUp, slideDown, animate. Chaînage : $(x).css(...).slideUp().slideDown()..on("click", f), .click(f), .dblclick(f), .mouseenter(f), .trigger("click"), délégation .on("click", "li", f).$(x).plugin(options) ; on en crée avec $.fn.nom = function () { return this; }.$("a").attr("href") |
$("a").attr("href", "https://www.ofppt.ma") |
.css() | $("p").css("color") | $("p").css("color", "red") ou .css({ color: "red", fontSize: "18px" }) |
| Méthode | Rôle |
|---|---|
.addClass(), .removeClass(), .toggleClass(), .hasClass() | gérer les classes |
.removeAttr("href") | supprimer un attribut |
.append(), .prepend(), .before(), .after() | ajouter du contenu |
.remove(), .empty() | supprimer les éléments / vider leur contenu |
.each(function () { ... }) | parcourir les éléments un par un (this = l'élément courant) |
.find(), .parent(), .children(), .next(), .closest() | naviguer dans le DOM |
| Méthode | Effet |
|---|---|
.hide(), .show(), .toggle() | cacher, afficher, basculer |
.fadeIn(), .fadeOut(), .fadeToggle() | apparition / disparition en fondu |
.slideUp(), .slideDown(), .slideToggle() | glissement vers le haut / vers le bas |
.animate({ propriétés }, durée) | animation personnalisée de propriétés CSS numériques |
Une boucle each souvent inutile
Lire la documentation d'un plugin
jquery.com propose deux fichiers : la version minifiée (.min.js, compressée, illisible mais légère) pour la production, et la version non compressée (lisible, commentée) pour le développement et le débogage. Le résumé cite les versions 3.5.1 et 3.6.0 ; ce cours utilise la version 3.7.1. Vérifie sur jquery.com la dernière version disponible.
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>jQuery</title>
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script> <!-- 1. jQuery d'abord -->
<script src="script.js" defer></script> <!-- 2. puis ton script -->
</head>
<body>
<p id="p1">Bonjour jQuery</p>
</body>
</html>Si ton script s'exécute avant jQuery, la console affiche Uncaught ReferenceError: $ is not defined. Place toujours la balise de jQuery avant la tienne (et avant celles des plugins).
$(sélecteur).action();$() est un raccourci de la fonction jQuery() : $("p") et jQuery("p") sont identiques. Elle trouve des éléments et renvoie un objet jQuery qui les contient ;querySelectorAll) ;$(this).hide(); // cache l'élément courant (dans un gestionnaire d'événement)
$("p").hide(); // cache TOUS les paragraphes
$(".test").hide(); // cache tous les éléments de classe test
$("#test").hide(); // cache l'élément d'id testL'événement ready
$(document).ready(function () {
// le code jQuery ici
});
$(function () { // forme courte, identique
// le code jQuery ici
});Le code placé dans ready ne s'exécute qu'une fois le DOM chargé : on évite ainsi de vouloir cacher un élément qui n'existe pas encore, ou de mesurer une image pas encore chargée. Avec l'attribut defer, le DOM est déjà prêt, mais ready reste la convention des projets jQuery.
Lire et modifier
Une même méthode lit une valeur quand on l'appelle sans argument, et la modifie quand on lui en donne un.
<ul class="menu">
<li><a href="https://www.ofppt.ma/">Lien 1</a></li>
<li><a href="https://www.ofppt.ma/">Lien 2</a></li>
<li><a href="https://www.ofppt.ma/" class="disabled">Lien 3</a></li>
</ul>
<script>
$(function () {
$(".menu a").each(function () {
if ($(this).hasClass("disabled")) {
$(this).removeAttr("href"); // le lien n'est plus cliquable
}
});
});
</script>$(".menu a.disabled").attr("href", "https://www.ofppt.ma/").removeClass("disabled");Un plugin est un fichier JavaScript qui ajoute de nouvelles méthodes à jQuery. On l'utilise ensuite comme une méthode normale : $(sélecteur).nomDuPlugin(options). Les plugins permettent de réutiliser du code existant (calendriers, carrousels, validations, sélecteurs d'heure) et de gagner du temps.
Intégrer un plugin existant
<input type="text" class="heure" value="14:30">
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script src="js/jquery-clock-timepicker.min.js"></script> <!-- le plugin, après jQuery -->
<script>
$(function () {
$(".heure").clockTimePicker(); // le plugin ajoute la méthode clockTimePicker()
});
</script>Refais la liste de courses de l'exercice 10.5 avec jQuery : un champ, un bouton « Ajouter », une liste. Un clic sur une tâche la barre (classe faite), un double-clic la supprime avec un fadeOut, et un compteur indique le nombre de tâches non faites. Utilise la délégation d'événements.
Réécris chaque instruction en jQuery, en une ligne.
document.querySelector("#titre").textContent = "Bienvenue";
document.querySelectorAll(".prix").forEach(p => p.style.color = "green");
document.querySelector("#menu").classList.toggle("ouvert");
document.querySelector("#photo").setAttribute("src", "maroc.jpg");
document.querySelector("#liste").innerHTML += "<li>Nouveau</li>";
document.querySelector("#btn").addEventListener("click", () => console.log("ok"));Une FAQ contient plusieurs blocs <div class="question"><h3>Question ?</h3><p>Réponse</p></div>. Avec jQuery : toutes les réponses sont cachées au chargement ; un clic sur un titre h3 déplie sa réponse avec slideDown et replie toutes les autres avec slideUp ; la question ouverte prend la classe ouverte.
Tableau: Les effets
Les effets acceptent une durée en millisecondes (.fadeOut(500)) ou les mots "slow" et "fast".
Le chaînage
Chaque méthode d'action renvoie l'objet jQuery lui-même : on peut donc enchaîner plusieurs méthodes sur la même sélection.
$("#p1").css("color", "red").slideUp(2000).slideDown(2000);
// même chose, plus lisible sur plusieurs lignes
$("#p1")
.css("color", "red")
.slideUp(2000)
.slideDown(2000);Le paragraphe devient rouge, glisse vers le haut en 2 secondes, puis redescend en 2 secondes : jQuery place les effets dans une file d'attente et les exécute l'un après l'autre.
Une méthode appelée pour lire renvoie une valeur (une chaîne), pas l'objet jQuery : $("h1").text().css("color", "red") provoque une erreur. Le chaînage ne fonctionne qu'avec les méthodes d'action ou appelées pour modifier.
Grâce aux sélecteurs, la boucle each du résumé peut s'écrire en une ligne : $(".menu a.disabled").removeAttr("href");. Garde each pour les traitements différents selon chaque élément.
$("p").click(function () {
$(this).hide(); // cache le paragraphe cliqué
});
$("p").dblclick(function () {
$(this).hide();
});
$("#p1").mouseenter(function () {
console.log("Tu es sur le paragraphe p1 !");
});
$("#p1").mouseleave(function () {
console.log("Tu as quitté le paragraphe p1 !");
});$("#btnValider").on("click", function () {
console.log("Validé");
});
$("#btnValider").trigger("click"); // déclenche le clic sans action de l'utilisateur
$("#taches").on("click", "li", function () { // fonctionne aussi pour les li ajoutés plus tard
$(this).toggleClass("faite");
});Le résumé annonce « la méthode dbclick() » : il s'agit de dblclick() (double click), comme l'écrit d'ailleurs son exemple de code.
Chaque plugin a sa propre méthode et ses propres options : elles sont décrites dans son fichier README (ici sur la page GitHub loebi-ch/jquery-clock-timepicker). Commence toujours par l'exemple minimal de la documentation, puis ajoute les options une à une.
Écrire son propre plugin
Comprendre comment un plugin est construit aide à les utiliser : un plugin ajoute une fonction à $.fn.
$.fn.surligner = function (couleur = "yellow") {
return this.css("background-color", couleur); // return this : le chaînage reste possible
};
$("p.important").surligner().fadeIn();
$("h2").surligner("lightblue");