2015-04-17 159 views
0

此for循環不運行。這個簡單的代碼應該獲得頁面上的所有H5元素,然後獲取「innerHTML」,但代碼永遠不會運行for循環。在for循環中獲取html元素

function myFunction() { 
    var x = document.getElementsByTagName("h5").length; 
    alert(x); 
    var y; 
    var z; 

    for (i = 0; i < x.length; i++) { 
     y = document.getElementsByTagName("h5")[i]; 
     z = y.innerHTML; 
     alert(z + " this"); 
    } 
} 
+0

也許你應該開火的方法? myFunction的(); – ius

+2

我認爲,在for循環中它應該是(i = 0; i

+0

'for(var i = 0; i mondjunge

回答

7

您正在尋找在x一個.length屬性,它本身就是一個長度數。我想你的意思是:

var x = document.getElementsByTagName("h5"); 

當然

for (i = 0; i < x; i++) { 

取決於你與x做什麼事後

+0

我在想什麼?謝謝,我想我正在爲此得到老路。謝謝 –

+0

發生在我們身上。對簡單的錯誤沒有年齡限制:-) – CodingIntrigue

1
var x = document.getElementsByTagName("h5").length; 
// ... 
for (i = 0; i < x.length; i++) { 

你打電話.length兩次或。

+0

作爲上述評論狀態,方式太舊。或者我需要更多的咖啡,謝謝 –

+0

這樣的事情每天都會發生:) – Arkanosis

0

其他答案是正確的,但這裏有一些重構與一些解釋。

function myFunction() { 
    // Taking out the '.length' means you have a reference to all the h5s 
    var x = document.getElementsByTagName("h5"); 
    alert(x); 
    var y; 
    var z; 


    //Now since you're not including the .length above, this loop is correct 
    for (i = 0; i < x.length; i++) { 
     //You since x is a reference to all the h5s now you don't 
     //have to search for them again. 
     y = x[i]; 
     z = y.innerHTML; 
     alert(z + " this"); 
    } 
} 

的重要組成部分,也只是使用一個getElementsByTagName呼叫,因爲這是一個相對昂貴的功能。如果可以避免的話,你肯定不想在循環中調用它。一般來說,爲了編寫好的JavaScript,您希望儘可能多地重用對DOM元素的引用,因爲DOM比Javascript慢很多。