web-dev-qa-db-fra.com

getElementById renvoie null?

document.getElementById('id of div that definately exists') renvoie null.

J'ai initialement chargé le javascript en dernier afin de m'assurer que je n'aurais pas à me soucier de l'événement onload. J'ai également essayé d'utiliser l'événement onload. C'est très effrayant. Vos idées ou votre aide seraient grandement appréciées.

37
Sheena

Elle peut être causée par:

  1. Syntaxe HTML non valide (une balise n'est pas fermée ou une erreur similaire)
  2. ID en double - il existe deux éléments HTML DOM avec le même ID
  3. Peut-être que l'élément que vous essayez d'obtenir par ID est créé dynamiquement (chargé par ajax ou créé par script)?

Veuillez poster votre code.

45
PanJanek

Faites également attention à la façon dont vous exécutez le js sur la page. Par exemple, si vous faites quelque chose comme ceci:

(function(window, document, undefined){

  var foo = document.getElementById("foo");

  console.log(foo);

})(window, document, undefined); 

Cela renverra null car vous appelleriez le document avant son chargement.

Meilleure option ..

(function(window, document, undefined){

// code that should be taken care of right away

window.onload = init;

  function init(){
    // the code to be called when the dom has loaded
    // #document has its nodes
  }

})(window, document, undefined);
51
cameronroe

Il pourrait y avoir plusieurs raisons pour lesquelles document.getElementById ne fonctionne pas

  • Vous avez un ID invalide

    Les jetons ID et NAME doivent commencer par une lettre ([A-Za-z]) et peuvent être suivis de n'importe quel nombre de lettres, chiffres ([0-9]), tirets ("-"), traits de soulignement ("_") , les deux-points (":") et les points ("."). (ressource: Quelles sont les valeurs valides pour l'attribut id en HTML? )

  • vous avez utilisé un identifiant que vous avez déjà utilisé en tant que <meta> nom dans votre en-tête (par exemple copyright, auteur ...) ça a l'air bizarre mais ça m'est arrivé: si vous utilisez IE jetez un œil à (ressource: http : //www.phpied.com/getelementbyid-description-in-ie/ )

  • vous ciblez un élément à l'intérieur d'un cadre ou d'une iframe. Dans ce cas, si l'iframe charge une page dans le même domaine du parent, vous devez cibler le contentdocument avant de rechercher l'élément (ressource: Appel d'un identifiant spécifique dans un cadre )

  • vous recherchez simplement un élément lorsque le nœud n'est pas effectivement chargé dans le DOM, ou peut-être que c'est une simple faute d'orthographe

Je doute que vous ayez utilisé le même identifiant deux fois ou plus: dans ce cas, document.getElementById devrait renvoyer au moins le premier élément

8
fcalderan