2011-02-28 62 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,如果您需要用它。