如何连接两个getElementsBy

时间:2011-06-16 16:34:19

标签: javascript dom

我有一段这样的代码:

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

这里有什么问题?

5 个答案:

答案 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]?)或迭代集合(确保它不是空的!)。