Cours jQuery (ultra-pédagogique) Chapitre 3 – Structure de base et DOM prêt
DOM $(document).ready() Erreurs débutants

Chapitre 3 – Structure de base et $(document).ready()

L’une des erreurs les plus fréquentes en jQuery (et en JavaScript) est d’exécuter du code trop tôt, avant que les éléments HTML existent réellement dans la page. Dans ce chapitre, tu vas comprendre ce qu’est le DOM, ce que signifie “DOM prêt”, et comment écrire une structure de base propre et fiable.

1) Comprendre le DOM (très simplement)

Quand le navigateur charge une page HTML, il lit le code et construit une “carte” interne. Cette carte s’appelle le DOM (Document Object Model).

Le DOM est la version “programmable” de ton HTML. C’est ce que JavaScript/jQuery manipule : ajouter une classe, modifier du texte, écouter un clic, etc.

Résumé : Ton HTML → le navigateur construit le DOM → JavaScript/jQuery manipule le DOM.

2) Le problème classique : le code s’exécute avant le DOM

Imagine cette page : ton script est dans le <head>, mais ton bouton n’est défini que plus bas dans le <body>.

Exemple (mauvaise pratique si tu n’as pas de protection) :

<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="UTF-8">
  <title>Test</title>

  <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>

  <script>
    // ⚠️ Le navigateur exécute ça immédiatement pendant le chargement du head
    $('#btn').on('click', function(){
      alert('Clic !');
    });
  </script>
</head>
<body>

  <button id="btn">Clique moi</button>

</body>
</html>
Problème : au moment où jQuery exécute $('#btn'), le bouton n’existe pas encore dans le DOM. Résultat : l’événement n’est pas attaché, et le bouton ne réagit pas.

3) Solution n°1 : $(document).ready()

jQuery propose un mécanisme simple : attendre que le DOM soit prêt, puis exécuter ton code.

Version “classique” :

$(document).ready(function () {
  // Ton code jQuery ici
});

Cette fonction signifie : “Quand le navigateur a fini de construire le DOM, exécute ce code.”

Important : DOM prêt ne veut pas dire “images chargées”. Ça veut dire : “les éléments HTML existent”.

4) Solution n°2 : la version courte $(function(){...})

jQuery propose une écriture plus courte, très utilisée :

$(function () {
  // Ton code jQuery ici
});

Cette version est strictement équivalente à $(document).ready(...).

Conseil : utilise la version courte $(function(){ ... }) au quotidien (plus lisible, plus rapide à écrire).

5) Solution n°3 : placer les scripts à la fin du body

Une autre approche consiste à placer les scripts juste avant </body>. Ainsi, le HTML a déjà été lu.

<body>
  <button id="btn">Clique moi</button>

  <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
  <script src="app.js"></script>
</body>
Avec cette technique, tu peux parfois te passer de ready(). Mais en formation, on conseille quand même de garder $(function(){...}) car c’est une habitude solide et réutilisable.

6) La structure “propre” recommandée (standard de cours)

Voici une structure simple, lisible et fiable pour commencer :

<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Page jQuery</title>
</head>

<body>

  <!-- 1) Ton HTML -->
  <button id="btn">Tester</button>

  <!-- 2) jQuery d’abord -->
  <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>

  <!-- 3) Ton script ensuite -->
  <script>
    $(function () {
      $('#btn').on('click', function () {
        alert('OK !');
      });
    });
  </script>

</body>
</html>
Cette structure évite 95% des bugs de “code exécuté trop tôt”.

7) Erreurs fréquentes (et comment les reconnaître)

Erreur A : $ is not defined

Cause : jQuery n’est pas chargé (ou pas chargé avant ton script).

Erreur B : le bouton ne réagit pas

Cause : ton code s’exécute avant que l’élément existe dans le DOM.

Erreur C : sélecteur incorrect

Cause : tu as écrit $('.btn') alors que ton élément a un id #btn.

Réflexe : ouvre la console (F12) et teste : console.log($('#btn').length). Si tu vois 0, c’est que ton sélecteur ne trouve rien.

Exercice (progressif) – DOM prêt

Objectif : constater le problème, puis le corriger.

  1. Place ton script dans le <head> (sans ready) et observe : le clic ne marche pas.
  2. Ajoute $(function(){ ... }) et constate : le clic marche.
  3. Bonus : ajoute un console.log pour afficher “DOM prêt”.
Correction
<!DOCTYPE html>
<html lang="fr">
<head>
  <meta charset="UTF-8">
  <title>Exercice DOM prêt</title>
  <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>

  <script>
    $(function () {
      console.log('DOM prêt');
      $('#btn').on('click', function () {
        alert('Clic détecté');
      });
    });
  </script>
</head>
<body>

  <button id="btn">Clique</button>

</body>
</html>

Résumé du chapitre

  • Le DOM est la version “programmable” de ton HTML.
  • Un bug fréquent : exécuter du jQuery avant que les éléments existent.
  • Solution recommandée : $(function(){ ... }).
  • Autre solution : scripts en bas de page, mais garder ready est une bonne habitude.