повторно использовать цикл селекторов jquery html - PullRequest
0 голосов
/ 28 февраля 2011

Я ищу лучшую практику для использования цикла 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);
}

Я имею в виду почти все, что во втором цикле.Я могу просто "скопировать / вставить" снова использовать тот же цикл, но я чувствую, что это не лучший способ пойти по этому пути.

Может быть, я могу обналичить этот цикл,или перейдите в какую-нибудь функцию, что вы предлагаете мне использовать в этом случае?

Спасибо

Ответы [ 2 ]

0 голосов
/ 01 марта 2011

Определить функцию высшего порядка:

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, если вам нужно их использовать.

0 голосов
/ 28 февраля 2011

Вместо этого используйте функцию, отправьте дату и usedYears и получите оба в качестве возвращаемых параметров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...