-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

空のオブジェクトlinks変数に割り当てましたが、後でそのプロパティにアクセスすると、配列lengthであることが期待されると思います。に変更します

    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 に答える