Javascript中的数组迭代问题

时间:2012-05-15 12:42:10

标签: javascript arrays loops iteration

我正在尝试创建一个从数组中读取元素并将其值分配给表的<tr>标记的函数。 所以我写了这段代码:

(function () {
  "use strict";
  var selectQG = {
    distributeCat : function (tablerow, categories) {
      var tr = $(tablerow), tri = 0;
      tr.each(function () {
        if (tri > 2) {
          for (var i = 0; i<categories.length; i++) {
            this.setAttribute('categoria',categories[i]);
          }
        }
        tri++;
      });
    }
  }
  var categories = ['1,2','3,4','5,6','7,8','9,10','11,12'];
  selectQG.distributeCat('table tr', categories);
} () );

检查这个小提琴,看看html代码和功能是否有效:http://jsfiddle.net/5kqEf/2/

循环正在执行6次,我无法弄清楚原因。我仍然是编程的新手,所以我需要一些帮助才能知道我做错了什么。任何帮助都将非常感激。

编辑:意思是每个<tr>获取数组值。它应该从第3 <tr>开始发生,这就是为什么我把那个“if”条件化。因此,第一个<tr>获取“类别[1]”,第二个<tr>获取“类别[2]”等等。

1 个答案:

答案 0 :(得分:1)

外循环执行9次,因为你有9个表tr元素。 .each将循环遍历每个tr元素,恰好是9个元素。见http://jsfiddle.net/5kqEf/4/

内部for循环遍历6个元素(数组var categories = ['1,2','3,4','5,6','7,8','9,10','11,12'];),所以这很有意义......

你的确切问题是什么?

如果你想根据索引选择一个类别(如果tr元素多于类别,则重新开始),你可能想要替换它:

 for (var i = 0; i<categories.length; i++) {
    this.setAttribute('categoria',categories[i]);
 }

用这个

var index = tri % categories.length;
this.setAttribute('categoria',categories[index]);