【问题标题】:reuse jquery html selectors loop重用 jquery html 选择器循环
【发布时间】:2011-02-28 20:02:27
【问题描述】:

我正在寻找使用 jquery 循环的最佳实践。

我有一个 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);
}

我的意思是第二个循环中的几乎所有内容。我可以“复制/粘贴”再次使用相同的循环,但我觉得这样做不是最佳做法。

也许我可以兑现这个循环,或者加入一些功能,你建议我在这种情况下使用什么?

谢谢

【问题讨论】:

  • 将此代码放在带有可选回调的函数中。如果回调存在,则将每次迭代都通过回调进行处理,否则继续。 (不过,我不是 100% 肯定你在这里想要实现的目标)。

标签: javascript jquery html loops


【解决方案1】:

改为使用函数,发送日期和 usedYears 并将两者都作为返回参数。

【讨论】:

  • 我的意思是主函数得到一个回调并调用发送日期和 UsedYears 到。
【解决方案2】:

定义一个高阶函数:

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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-28
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    相关资源
    最近更新 更多