我有一段这样的代码:
var profileLinks = new Array();
for (var i = 0; i<searchResult.length; ++i)
{
var profileLink=searchResult[i].getElementsByTagName("a");
profileLinks[i]=profileLink[0].href;
alert(i+1+" of "+searchResult.length+" "+profileLinks[i]);
}
似乎我应该能够通过使用它来使其更简洁:
//alternate construction (why doesn't this work?)
var searchResult = document.getElementsByClassName("f_foto").getElementsByTagName("a");
这里有什么问题?
答案 0 :(得分:2)
改为使用querySelectorAll()
:
var searchResult = document.querySelectorAll(".f_foto a");
IE 8支持querySelectorAll()
但不支持getElementsByClassName()
,因此这也可以为您提供更好的兼容性。
要获得完全兼容性,请坚持使用原始代码或使用jQuery等库。
答案 1 :(得分:1)
这就是为什么我们有图书馆 - 甚至现代浏览器。您正在寻找jQuery中的css选择器$('.f_foto a')
,或者在Prototoype / Chrome中寻找$$('.f_foto a')
答案 2 :(得分:1)
document.getElementsByClassName("f_foto")
返回一个选择,因此您无法将函数链接到它。您需要直接指定元素而不是整个选择,例如,这将正常工作。
document.getElementsByClassName("f_foto")[0].getElementsByTagName("a");
因为document.getElementsByClassName(“f_foto”)[0]指向一个对象而不指向一组对象。
答案 3 :(得分:0)
您在节点上调用getElementsByTagName,而不是数组,这是getElementsByClassName返回的内容。
答案 4 :(得分:0)
我相信getElementsByTagName
只能应用于元素节点,但getElementsByClassName
的结果肯定会是节点的列表。你要么必须选择一个([0]
?)或迭代集合(确保它不是空的!)。