-1

我正在本网站上的 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");
    }
4

3 回答 3

3

您确实为变量分配了一个空对象,但是当您稍后访问它的属性时,我猜您希望它是一个数组。将其更改为linkslength

    links = [];
于 2013-01-09T23:48:40.880 回答
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;
}
于 2013-01-09T23:54:53.303 回答
1

变量links(等等elements)是一个对象,而不是一个数组,所以你不能得到它的长度。您可以将其更改为数组(这可能是您想要做的,links=[]而不是links = {}),或者您可以使用 foreach 循环记录elements对象的所有属性:

for (i in elements) {
    g_link = elements[i].innerHTML;
    console.log(g_link + "\n");
}
于 2013-01-09T23:55:05.460 回答