getElementById () renvoie null même si l'élément existe [dupliquer]

cette question a déjà une réponse ici:

  • pourquoi jQuery ou une méthode DOM telle que getElementById ne trouve-t-elle pas l'élément? 6 réponses

j'essaie d'obtenir l'élément avec getElementById(), mais il renvoie null même si l'élément existe. Ce que je fais mal?

<html>
<head> 
    <title>blah</title>
    <script type="text/javascript">
        alert(document.getElementById("abc"));
    </script>
</head> 
<body>
    <div id="abc">

    </div>
</body>

45
demandé sur Deduplicator 2011-03-20 22:49:29

5 réponses

vous devez mettre cela dans un document load événement. Le DOM n'a pas atteint abc au moment où le script est exécuté.

63
répondu Daniel A. White 2011-03-20 19:50:47

votre script s'exécute avant que le DOM ait été chargé. Pour corriger cela, vous pouvez placer votre code dans la fonction window.onload comme suit:

window.onload = function() {
    alert(document.getElementById("abc"));
};

une alternative est de placer votre script juste avant la fermeture </body> étiquette.

33
répondu mVChr 2011-03-20 19:52:46

si vous ne voulez pas vous attacher à l'événement load alors mettez simplement votre script au fond du corps, donc il s'exécutera à la fin-

<html>
<head> 
    <title>blah</title>    
</head> 
<body>
    <div id="abc">
    </div>
    <script type="text/javascript">
        alert(document.getElementById("abc"));
    </script>
</body>
</html>
7
répondu Premraj 2011-03-20 19:56:13

c'est parce que le script court avant que la page ait rendu.

pour preuve, ajouter cet attribut à la balise:

<body onload="alert(document.getElementById('abc'));" >
4
répondu Hogan 2011-03-20 19:51:11

mais il n'existe pas, pas à ce point dans le HTML. Les documents HTML sont analysés de haut en bas, tout comme les programmes. La meilleure solution est juste de mettre votre étiquette de script au bas de la page. Vous pouvez aussi joindre votre JavaScript à l'événement onload.

0
répondu jpsimons 2011-03-20 19:52:45