2012-05-15 75 views
0

我試圖創建一個從數組中讀取元素並將其值分配給表的<tr>標記的函數。 所以我寫了這個代碼:Javascript中的數組迭代問題

(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代碼和功能工作:循環正在執行6次,我不能弄清楚爲什麼http://jsfiddle.net/5kqEf/2/

。我仍然是編程的新手,所以我需要一些幫助才能知道我做錯了什麼。任何幫助將非常感激。

編輯:理念是每<tr>獲得數組值。它應該從第三個<tr>開始,這就是爲什麼我把這個「如果」條件。所以,第一個<tr> GET 「類別[1]」,第二個<tr> GET 「類別[2]」 等。

+0

你指的是哪一個循環?該'for'循環遍歷有6項數組'categories',這樣纔有意義...... – mellamokb

回答

1

外環執行9次,因爲你必須9層表TR的元件。 .each將循環遍歷每個tr元素,這恰好是9個元素。見http://jsfiddle.net/5kqEf/4/

超過6個元素(數組var categories = ['1,2','3,4','5,6','7,8','9,10','11,12'];)內的for循環迴路,這樣纔有意義......

什麼是您的具體問題?

如果你想挑基於指數(和startover如果有更多的TR元素比類別)一個類別,你可能要取代這個:

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

與此

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

好吧,這個想法是,每個陣列值分配每個tr標籤。但是由於額外的迭代,當循環完成時,tr標籤將獲得所有的一些屬性,即數組的最後一個值。 – darksoulsong

+0

如果您希望每個tr都有下一個類別,那麼請不要循環,而是使用索引var來選擇正確的類別。我更新了我的答案! –

+0

很好,謝謝你有關運營商的鏈接。這將幫助我很多=) – darksoulsong