Pourquoi jQuery ou une méthode DOM telle que getElementById ne trouve-t-elle pas l'élément ?

Quelles sont les raisons possibles pour lesquelles document.getElementById, $("#id")ou toute autre méthode DOM / sélecteur jQuery ne trouve pas les éléments ?

Voici quelques exemples de problèmes :


  • jQuery échoue silencieusement à lier un gestionnaire d'événements

  • Méthodes jQuery "getter" ( .val(), .html(), .text()) retournantundefined

  • Une méthode DOM standard renvoyée nullentraînant l'une des nombreuses erreurs suivantes :


TypeError non intercepté : impossible de définir la propriété '...' de null
TypeError non intercepté : impossible de définir les propriétés de null (paramètre '...')
TypeError non intercepté : impossible de lire la propriété '...' de null
TypeError non intercepté : impossible de lire les propriétés de null (en train de lire '...')

Les formes les plus courantes sont:

TypeError non intercepté : impossible de définir la propriété 'onclick' de null
TypeError non intercepté : impossible de lire la propriété 'addEventListener' de null
TypeError non intercepté : impossible de lire la propriété 'style' de null


Solution du problème

L'élément que vous essayiez de trouver n'était pas dans le DOM lors de l'exécution de votre script.

La position de votre script dépendant de DOM peut avoir un effet profond sur son comportement. Les navigateurs analysent les documents HTML de haut en bas. Les éléments sont ajoutés au DOM et les scripts sont (généralement) exécutés au fur et à mesure qu'ils sont rencontrés. Cela signifie que l'ordre compte. En règle générale, les scripts ne peuvent pas trouver les éléments qui apparaissent plus tard dans le balisage car ces éléments n'ont pas encore été ajoutés au DOM.

Considérez le balisage suivant ; le script #1 ne parvient pas à trouver le <div>tandis que le script #2 réussit :


<script>
console.log("script #1:", document.getElementById("test")); // null
</script>
<div id="test">test div</div>
<script>
console.log("script #2:", document.getElementById("test")); // <div id="test"...
</script>

Commentaires

Posts les plus consultés de ce blog

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"