我正在本网站的FireFox的JavaScript控制台中测试此功能: http://www.google.com/search?hl=en&tbo=d&output=search&sclient=psy-ab&q=python 所需的输出只是每个链接的文本(.innerHTML)。
parents = document.getElementsByClassName("r");
function my_links() {
links = {};
for (var i=0; i<parents.length; i++) {
links[i] = parents[i].getElementsByTagName("a")[0];
};
return links;
}
elements = my_links();
for (var i=0; i<elements.length; i++) {
g_link = elements[i].innerHTML;
console.log(g_link + "\n");
}
答案 0 :(得分:3)
您确实为links
变量分配了一个空的对象,但是当您稍后访问其length
属性时,我猜您希望它是一个阵列。将其更改为
links = [];
答案 1 :(得分:1)
var parents = document.getElementsByClassName("r");
function my_links() {
var links = []; // <-- I suppose it should be array and should not be global
for (var i=0; i<parents.length; i++) {
// when you're not defining array length then use push instead of indexes
links.push(parents[i].getElementsByTagName("a")[0]);
};
return links;
}
你可以用更有效的方式做到这一点
function my_links() {
var links = new Array(parents.length),
i = parents.length;
while (i--) {
links[i] = parents[i].getElementsByTagName("a")[0];
}
return links;
}
答案 2 :(得分:1)
变量links
(以及elements
)是一个对象,而不是一个数组,所以你不能得到它的长度。您可以将其更改为数组(可能是您想要执行的操作,links=[]
而不是links = {}
),或者您可以使用foreach循环来记录elements
对象的所有属性:< / p>
for (i in elements) {
g_link = elements[i].innerHTML;
console.log(g_link + "\n");
}