2013-01-09 64 views
-1

我正在使用JavaScript測試此功能本網站上的FireFox控制檯: http://www.google.com/search?hl=en&tbo=d&output=search&sclient=psy-ab&q=python 而期望的輸出只是每個鏈接的文本(.innerHTML)。我的JavaScript函數有什麼問題

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

什麼是'MyClass.js_showMessage( 「結果」);'? – Bergi

+0

運行代碼時會得到什麼異常?什麼不行? – Bergi

+1

-1請花時間嘗試隔離問題,以至少寫出有用的標題。 – 2013-01-10 00:00:49

回答

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; 
} 
+0

謝謝你改進我的代碼 – Vor

3

你做一個空對象分配給links變量,但你以後訪問其length屬性我想你希望它是一個陣列。將其更改爲

links = []; 
+0

謝謝它有幫助! – Vor

1

可變links(等elements)是一個對象,而不是一個數組,所以你不能得到它的長度。你可以把它改成一個數組(它可能是你想要做的,而不是links=[]什麼links = {}),或者你可以使用foreach循環日誌elements對象的所有屬性:

for (i in elements) { 
    g_link = elements[i].innerHTML; 
    console.log(g_link + "\n"); 
} 
+0

非常感謝! – Vor

+1

請區分for-in-loop和for-each-loops - 它們在即將到來的EcmaScript版本中是不同的。閱讀https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/for_each... – Bergi

+0

@Bergi非常感謝您指出這一點!非常感謝它! – Vor