以下javascript代码抛出错误
Uncaught TypeError: Object #<HTMLSpanElement> has no method 'getElementById'
如果不允许这样做,我如何在其他元素中搜索特定元素的存在?
var googlePlusPosts = document.getElementsByClassName("mo fj");
for (var i = 0; i < googlePlusPosts .length; ++i) {
decryptElements = googlePlusPosts[i].getElementById('decrypt-button');
.
.
.
答案 0 :(得分:3)
getElementById不是Element接口的一部分,它是Document接口的一部分。 http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-getElBId
因此,只能通过调用document.getElementById
来获取ID的元素。这在规范中是完全正确的,因为在文档中只能有一个元素和指定的ID,所以我实际上感觉到问题出现在你的代码中(看起来你已经超过了一个id为“decrypt-button”的元素。)
至于链接,如果你可以确保你在浏览器中有querySelector接口,你可以googlePlusPosts[i].querySelector('#decrypt-button');
这仍然是错误的,因为你应该使用一个类而不是一个id并且{{1} }}
答案 1 :(得分:0)
ID必须是唯一的;因此,在特定节点内查找特定ID并没有多大意义; ID存在,或者不存在。
您可以使用element.getElementsByClassName来获取特定类的子元素,或使用element.getElementsByTagName来获取它们的标记名称。
编辑:忽略以下内容;刚为后人保存。
检查元素是否具有提前的getElementById方法。
if (foo.getElementById) {
foo.getElementById("bar");
}
答案 2 :(得分:0)
在modern browsers中,您可以使用querySelector
:
googlePlusPosts[i].querySelector("#decrypt-button")
否则,您最好使用框架。
答案 3 :(得分:0)
假设您想要覆盖未实现.querySelector()
的旧浏览器,并且您没有使用已经具有内置方法的某些框架/库,那么可以检查特定元素是否包含另一个element是编写自己的使用.parentNode
的函数,如下所示:
function isDescendant(p, c) {
while (null != (c = c.parentNode))
if (p === c)
return true;
return false;
}
// then, from your code:
var decryptButton =document.getElementById("decrypt-button");
for (var i = 0; i < googlePlusPosts .length; ++i)
if (isDescendant(googlePlusPosts[i], decryptButton))
// do something