Pourquoi getElementsByTagName est-il renvoyé indéfini?

J'essaie d'appeler document.getElementsByTagName , et je reviens undefined en conséquence, quel que soit le paramètre que je passe. (Même si je passe "*".)

J'ai essayé Googling pour cela, mais tous les résultats de recherche portaient sur le fait que les éléments du tableau de résultats GetElementsByTagName étaient indéfinis. Ce que je reçois est undefined comme le résultat lui-même, et il me conduit sur le mur.

Est-ce que quelqu'un sait ce qui peut causer cela? (Utilisation de Firefox 12.0. En Chrome, j'obtiens les résultats attendus.)

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 le getElementsByTagName retourne toujours undefined , que je le trace dans l'onglet Script de Firebug ou que je l'appelle depuis l'onglet Console. (Également dans Firebug, car cela semble confondre les gens. Apparemment, il y a trop de consoles flottant autour).

À titre de preuve, voici ce que j'ai eu lorsque j'ai essayé d'utiliser la console 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 marquage est (ou devrait être) non pertinent. C'est une page HTML valide et bien formée avec quelques boutons et autres éléments. Cette fonction JS est attachée à l' onclick de l'un des boutons. Mais cela ressemble à 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> 

modifier:

Il s'agit d'un bug dans firebug et est corrigé en passant à 1.10.0a7


Parce qu'il est impossible pour cette méthode de rendre undefined , il existe 2 possibilités:

  • Vos outils de débogage vous mentent
  • document.getElementsByTagName ne fait pas référence à l'objet hôte d'origine. Il devrait imprimer la function getElementsByTagName() {[native code]} lorsqu'il est référencé dans la console.

Vous devriez être en mesure de vérifier si c'est en fait undefined (dans Firefox) avec ceci:

 delete window.alert; window.alert(buttons); 

La delete est un NOOP si window.alert fait déjà référence à l'objet hôte d'origine, sinon il le restaurera.

S'il annule undefined fichier undefined , vous devriez pouvoir le faire

 delete document.getElementsByTagName 

Pour restaurer la référence de l'objet hôte.

Toutes les références de la console se réfèrent à la console Web intégrée livrée avec firefox par défaut.

REPL n'est-il pas un environnement JavaScript autonome et indépendant du navigateur? Bien que, dans votre cas, il se soit déroulé dans votre navigateur en tant que plugin, il est censé imiter une "salle blanche" par dis …

Pour résumer la réponse de ce type: document.getElementById () renvoie null lors de l'utilisation de mozrepl (mais pas dans firebug)

Par défaut, vous êtes dans le contexte du navigateur et non dans le document.

Essayez cela de passer au document à la place:

 repl.enter(content) 

J'ai eu le problème lorsque j'ai fait une erreur de syntaxe difficile à voir. J'ai utilisé des parenthèses lorsque j'aurais utilisé des crochets

Faux:

 selectedItem._element.childNodes(0).getElementsByTagName('input').item(); 

Droite:

 selectedItem._element.childNodes[0].getElementsByTagName('input').item(); 

Regarde la différence? Notez que la syntaxe supérieure fonctionne avec d'anciennes versions d'IE, comme IE8, mais cela ne fonctionne pas dans ie10, ie11, Edge etc.