在for循环中获取html元素

时间:2015-04-17 15:05:53

标签: javascript for-loop

此for循环无法运行。这个简单的代码应该得到页面上的所有H5元素,然后得到" innerHTML"但代码永远不会运行for循环。

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

3 个答案:

答案 0 :(得分:7)

您正在.length上寻找x属性,该属性本身就是一个长度数字。我想你的意思是:

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

当然

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

取决于您之后使用x做什么

答案 1 :(得分:1)

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

您正在拨打.length两次。

答案 2 :(得分: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 Elements的引用,因为DOM比Javascript慢得多。