2011-02-28 84 views
0

我正在尋找使用jQuery循環的最佳實踐。重用jquery html選擇器循環

我有一個jQuery的循環,就像這樣:

$.each(rows, function(){ 
    var rowClass = $.trim(this); 
    $('table.' + o.MainTableClass).append('<tr class="'+rowClass+'" />'); 
    $('.'+rowClass).find('.ItemRow').each(function(){ 
    var date = $(this).find('span.Date').text().split(o.dateSpliter).pop(); 
    if($.inArray(date,usedYears)==-1) 
    { 
     usedYears.push(date); 
    } 
    }); 
}); 

的想法是,我必須除了這部分再次重用這個循環:

if($.inArray(date,usedYears)==-1) 
{ 
    usedYears.push(date); 
} 

我的意思是幾乎一切是什麼在第二個循環中。我可以只是「複製/粘貼」再次使用相同的循環,但我覺得這是不是最好的做法,以這種方式。

也許我可以兌現這個循環,或者放入一些函數,在這種情況下你建議我使用什麼?

謝謝

+0

將此代碼放入具有可選回調函數的函數中。如果回調存在,則將每次迭代通過回調進行處理,否則繼續。 (雖然,我不是100%肯定你在這裏試圖達到的目標)。 – 2011-02-28 20:08:30

回答

0

使用函數,而不是發送日期和usedYears並獲得兩個返回參數。

+0

我的意思是主函數獲取回調並調用發送日期和UsedYears。 – AbiusX 2011-02-28 20:08:13

+0

你可以編輯你的答案而不是評論它。 – 2011-02-28 20:21:15

0

定義高階函數:

function eachRow(func) { 
    $.each(rows, function() { 
    var rowClass = $.trim(this); 
    $('table.' + o.MainTableClass).append('<tr class="' + rowClass + '" />'); 
    $('.' + rowClass).find('.ItemRow').each(function() { 
     var date = $(this).find('span.Date').text().split(o.dateSpliter).pop(); 
     func(date); 
    }); 
}); 

然後:

var usedYears = []; 
eachRow(function (date) { 
    if($.inArray(date,usedYears)==-1) 
    { 
     usedYears.push(date); 
    } 
}); 

再利用:

eachRow(function (date) { 
    //do stuff with date. 
}); 

你可以傳遞更多的東西進入FUNC,如果您需要用它。