2

在下面的代码中,我通过使用 javascript 为所有偶数行动态分配“偶数”类来为所有偶数行应用不同的背景颜色。我正在调用body标签的alternamte()函数onload。

起初,我使用 getElementById 来获取表对象,并且我的代码运行良好。但是,我想将此样式应用于我页面上的所有表格,因此我需要通过标签名称使用获取元素。

一旦我找到了getElementByTagName,我的代码就停止了工作,我一直试图找出问题的根源,但没有成功。我想知道是否有人可以帮助我理解为什么在更改 getElementByTagName 后我的代码停止工作?

  <script type="text/javascript"> 
    function alternate(){
        var table = document.getElementsByTagName("table");   
        var rows = table.getElementsByTagName("tr");   

        for(i = 0; i < rows.length; i++){           
            //change style of even rows 
            //(odd integer values, since we're counting from zero)
            if(i % 2 == 0){ 
                rows[i].className = "even"; 
            }     
        }   
    }
  </script>
4

3 回答 3

4

它是getElementsByTagName(),复数。它返回一个 HTMLCollection

var table = document.getElementsByTagName("table")[0];   

(如果您确信<table>页面上有一个。)

如果你想对所有元素做一些事情,<table>你必须做这样的事情:

    var tables = document.getElementsByTagName("table");   

    for (var ti = 0; ti < tables.length; ++ti) {
      var rows = tables[ti].getElementsByTagName("tr");   
      for(var i = 0; i < rows.length; i++){           
        //change style of even rows 
        //(odd integer values, since we're counting from zero)
        if(i % 2 == 0){ 
            rows[i].className = "even"; 
        }     
      }   
    }
于 2012-10-29T16:04:54.047 回答
1

使用getElementsByTagName代替getElementByTagName(getElementsByTagName 返回多个节点元素)

 var table = document.getElementsByTagName("table")[0], trs, rl;  
 vat tl= table.length;
 while(tl--){
        trs = tables[tl].getElementsByTagName("tr");
        rl = trs.length;
        while(rl--){
           if(rl % 2 == 0){ 
              trs[rl].className = "even"; 
           } 
        }
  }
于 2012-10-29T16:04:28.727 回答
-2

getElementsByTagName() 返回一个匹配选择器的数组。因此尝试

var table = getElementsByTagName('table')[indexnumber];
于 2012-10-29T16:10:00.953 回答