我的JavaScript函数有什么问题

时间:2013-01-09 23:45:00

标签: javascript

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

3 个答案:

答案 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");
}