为什么 getElementsByTagName 返回未定义?

新手上路,请多包涵

我正在尝试调用 document.getElementsByTagName ,结果我回来了 undefined 无论我传递什么参数。 (即使我通过“*”。)

我尝试使用谷歌搜索,但所有搜索结果都是关于未定义 getElementsByTagName 结果数组的元素。我得到的是 undefined 作为结果本身,它让我难以自拔。

有谁知道是什么原因造成的? (使用 Firefox 12.0。在 Chrome 中我得到了预期的结果。)

编辑:好的,这是示例代码:

 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");
}

getElementsByTagName 总是返回 undefined ,无论我是在 Firebug 的脚本选项卡中跟踪它还是从控制台选项卡调用它。 (也在 Firebug 中,因为这似乎让人感到困惑。显然有太多的控制台在四处漂浮。)。

作为证据,这是我尝试使用 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

标记是(或应该是)无关紧要的。这是一个有效的、格式良好的 HTML 页面,其中包含一些按钮和其他元素。此 JS 函数附加到其中一个按钮的 onclick 。但它看起来像这样:

 <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>

原文由 Mason Wheeler 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

编辑:

这是萤火虫中的一个错误,可以通过升级到 1.10.0a7 来修复


因为这个方法不可能返回 undefined ,所以有2种可能:

  • 你的调试工具在骗你
  • document.getElementsByTagName 未引用原始主机对象。在控制台中引用时,它应该打印 function getElementsByTagName() {[native code]}

您应该能够可靠地查看它是否实际上是 undefined (在 firefox 中):

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

delete 是一个 NOOP 如果 window.alert 已经引用了原始主机对象,否则它将恢复它。

如果它 提醒 undefined ,你应该能够做到

delete document.getElementsByTagName

恢复宿主对象引用。

此处所有控制台参考均指默认情况下 firefox 附带的内置 Web 控制台。

原文由 Esailija 发布,翻译遵循 CC BY-SA 3.0 许可协议

当我很难看到语法错误时,我遇到了问题。当我应该使用 方括号 时,我使用了 括号

错误的:

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

正确的:

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

看到不同?请注意,top 语法适用于旧版本的 IE,如 IE8,但它不适用于 ie10、ie11、Edge 等

原文由 Tom McDonald 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题