我正在尝试拨打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>
答案 0 :(得分:8)
修改强>
这是firebug中的一个错误,可以通过升级到1.10.0a7
来修复因为此方法无法返回undefined
,所以有两种可能性:
document.getElementsByTagName
未引用原始主机对象。它应该打印
在控制台中引用时function getElementsByTagName() {[native code]}
。你应该能够可靠地查看它是否实际上是undefined
(在firefox中):
delete window.alert;
window.alert(buttons);
如果delete
已经引用原始主机对象,则window.alert
是NOOP,否则
它会恢复它。
如果提醒 undefined
,您应该可以
delete document.getElementsByTagName
恢复主机对象引用。
此处的所有控制台引用都是指默认情况下随Firefox附带的内置Web控制台。
答案 1 :(得分:0)
REPL不是一个独立的,独立于浏览器的JavaScript环境吗?虽然,在你的情况下,恰好在你的浏览器中作为一个插件运行,它应该模仿一个“干净的房间”每个说...
总结这个家伙的答案:document.getElementById() returns null when using mozrepl (but not in firebug)
默认情况下,您在浏览器的上下文中,而不是文档的。
请尝试将其切换为文档:
repl.enter(content)
答案 2 :(得分:0)
当我难以看到语法错误时,我遇到了问题。当我应该使用方形括号
时,我使用了括号错:
selectedItem._element.childNodes(0).getElementsByTagName('input').item();
右:
selectedItem._element.childNodes[0].getElementsByTagName('input').item();
看到区别?注意,顶级语法的工作原理是IE的旧版本,比如IE8,但它在ie10,ie11,Edge等中不起作用
答案 3 :(得分:0)
您无法提醒Array
,应执行for循环来提醒它。示例:
var x = document.getElementsByTagName('a');
for (var i = 0, c = x.length ; i < c ; i++) {
alert('Element n° ' + (i + 1) + ' : ' + x[i]);
}