Chargement de la page

En règle générale on peut agir sur un élément que s'il existe.

En JavaScript c'est la même chose, on ne peut pas modifier par programmation un élément qui n'existerait pas encore.

Le code ne peut donc pas se trouver avant la création du HTML.

Ce qui suit est correct :

1
<html>
2
<head>
3
</head>
4
<body>
5
  <div>
6
   <img id='image' alt='image' src='images/image1.gif' />
7
  </div>
8
  <script>
9
   document.querySelector('#image').src = "images/image2.gif";
10
  </script>
11
</body>
12
</html>

Ce qui suit est incorrect :

1
<html>
2
<head>
3
  <script>
4
   document.querySelector('#image').src = "images/image2.gif";
5
  </script>
6
</head>
7
<body>
8
  <div>
9
   <img id='image' alt='image' src='images/image1.gif' />
10
  </div>
11
</body>
12
</html>

Dans la console il serait affiché : document.querySelector('#image') is null

En effet, l'image n'existe pas encore et on tente de la modifier.

Méthodewindow.addEventListener("load", fonction, false)

Pour écrire le JavaScript avant la création du HTML, il faut créer des fonctions qu'on appellera une fois la page chargée.

L'événement qui définit qu'une page est chargée est load.

Le principe est de lui associer une fonction qui sera réalisée à chaque fois que l'événement se produit.

1
window.addEventListener("load", fonction, false)

La fonction sera lancée après le chargement de la page.

Ce qui nous donne au final :

HTML

1
<html>
2
<head>
3
  <script src="js/exemple.js"></script>
4
</head>
5
<body>
6
  <div>
7
   <img id='image' alt='image' src='images/image1.gif' />
8
  </div>
9
</body>
10
</html>

JavaScript

1
window.addEventListener("load", function(){ 
2
document.querySelector('#image').src = "images/image2.gif";
3
});

RemarqueAutre solution

Vous pouvez contourner le problème de chargement de page en positionnant vos scripts juste avant la fin de body dans votre page HTML.