0

配列から要素を読み取り、その値を<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>は「categories[1]」を<tr>取得し、2 番目は「categories[2]」を取得します。

4

1 に答える 1

1

9 つのテーブル tr 要素があるため、外側のループは 9 回実行されます。.each は、たまたま 9 つの要素であるすべての tr 要素をループします。http://jsfiddle.net/5kqEf/4/を参照

内側の for ループは 6 つの要素 (配列var categories = ['1,2','3,4','5,6','7,8','9,10','11,12'];) をループするので、理にかなっています...

あなたの正確な質問は何ですか?

インデックスに基づいてカテゴリを選択したい場合 (およびカテゴリよりも多くの tr 要素がある場合は startover を使用する場合)、これを置き換えることができます。

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

これとともに

var index = tri % categories.length;
this.setAttribute('categoria',categories[index]);
于 2012-05-15T12:46:13.907 に答える