Pourquoi est-getElementsByTagName retour indéfini?

Je suis en train d'appeler document.getElementsByTagName, et je suis de retour undefined comme conséquence, n'importe quel paramètre je passe. (Même si je passe "*".)

J'ai essayé de Googler pour elle, mais tous les résultats de la recherche ont été les éléments de la getElementsByTagName tableau résultat est indéfini. Ce que j'obtiens est undefined que le résultat lui-même, et il me conduit dans le mur.

Personne ne sait ce qui peut en être la cause? (À L'Aide De Firefox 12.0. Dans google Chrome, j'ai obtenu les résultats escomptés.)

EDIT: OK, voici un exemple de code:

function buttonClick(){
   var xhr = new XMLHttpRequest();
   var msg = document.getElementById('message');
   var buttons = document.getElementsByTagName("button");
   var button, i;
   for (i = 0; i < buttons.length; ++i){
      button = buttons[i];
      msg.removeChild(button);
   }

   xhr.onreadystatechange = function() {
        if(xhr.readyState == 4){
            handleResult(xhr.responseText, msg);
        }
   };
   xhr.open("POST", location.href, true);
   xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
   xhr.send("cmd=MyCommand");
}

Et la getElementsByTagName retourne toujours undefined, si je trace dans Firebug de l'onglet Script ou d'appel à partir de l'onglet Console. (Également dans Firebug, puisque cela semble être embrouiller les gens. Apparemment il y a trop de consoles flottant autour.).

Comme preuve, voici ce que j'ai reçu lorsque j'ai essayé d'utiliser la console de Firebug:

>>> document.getElementsByTagName("button");
undefined
>>> msg.getElementsByTagName("button");
undefined
>>> msg.getElementsByTagName
getElementsByTagName()
>>> msg.getElementsByTagName("BUTTON");
undefined
>>> msg.getElementsByTagName("*");
undefined
>>> document.getElementsByTagName("*");
undefined
>>> document.getElementsByTagName("body");
undefined

Le balisage est (ou devrait être) pas pertinent. Il est valide et bien formé page HTML avec des boutons et d'autres éléments sur elle. Cette fonction JS est attaché à la onclick de l'un de ces boutons. Mais il ressemble à quelque chose comme ceci:

<html xmlns="http://www.w3.org/1999/xhtml"><head>
blah
</head>
<body>
<script type="text/javascript" src="/myJS.js"></script>
<div id="page-container">
   <div id="message"><button onclick="buttonClick();">Button 1</button><button onclick="ButtonClick2()">Button 2</button></div>

</div>

</body></html>
Cette méthode ne doit jamais revenir undefined, même quand il n'y a pas de matches. Êtes-vous d'essais dans la console, ou sur une page?
Avez-vous essayé de lancer le JavaScript après les éléments sont chargés dans les DOM? Mettre le <script>...</script> juste avant la fermeture </body> tag? Ou dans un <body onload="functionName()"> événement onload?
Violon démos: jsfiddle.net/5nQDc
Je ne vois pas où vous vous connectez à la console. Peut-être une faute de frappe? Peut-être console.log(button), laissant le s? Peut-être que vous vous connectez à l'extérieur de l'étendue de la variable? Peut-être que vous êtes affecté par la nature asynchrone des requêtes xhr?
Vous n'étiez pas explicite sur ce que vous faisiez dans la console. Si vous êtes l'exécution de getElementsByTagName directement dans la console, mais vous êtes en train de faire var foo = document.getElem..., il sera montré que undefined.

OriginalL'auteur Mason Wheeler | 2012-05-27