Начиная с любой позиции элемента в массиве с помощью jquery $ .each - PullRequest
3 голосов
/ 26 августа 2011

Могу ли я начать цикл с 3-го элемента или любого другого элемента в массиве с помощью jquery $.each(), а также с $(elem).each(). Я хочу оба примера. #tableau - это идентификатор <table> в HTML. Смотрите мой код ниже:

var tableau = $('#tableau'), 
    tds = tableau.find('td'),
    tdLen = tds.length,
    superMarios = [
                    'Super Mario Bros', 
                    'Super Mario Bros 2', 
                    'Super Mario Bros 3', 
                    'Super Mario World',
                    'Super Mario World 2: Yoshi\'s Island',
                    'Super Mario Galaxy', 
                    'New Super Mario Bros Wii', 
                    'Super Mario Galaxy 2'
                 ],
    superMarioCollection = superMarios.length;

$.each(superMarios, function(i, val){
  console.log(i + ': ' + val);
  tds.eq(i).append(val);
});

Большое спасибо

Ответы [ 3 ]

4 голосов
/ 26 августа 2011

Вы не можете начать с чего-либо, кроме 0 с $.each(), но вы можете предотвратить запуск кода внутри, используя оператор if().

$.each(superMarios, function(i, val){
  if( i >= 2 ) {
      console.log(i + ': ' + val);
      tds.eq(i).append(val);
  }
});

Или, если вы хотите начать с третьего, но хотите, чтобы индексы начинались с 0, просто возьмите .slice() массива, задав ему нулевой индекс, с которого вы хотите начать.

$.each(superMarios.slice( 2 ), function(i, val){
  console.log(i + ': ' + val);
  tds.eq(i).append(val);
});

Или в качестве альтернативы первому примеру, просто сместите i на ту же сумму, что и ваша начальная точка, чтобы получить более высокий начальный индекс:

var idx = 2;
$.each(superMarios.slice( idx ), function(i, val){
   console.log((i+idx) + ': ' + val);
   tds.eq(i+idx).append(val);
});
4 голосов
/ 26 августа 2011

Нет.

Вместо этого следует использовать обычный цикл for.

1 голос
/ 26 августа 2011

Хотя вы не можете указать $.each начинать с определенного индекса, вы можете slice массива перед передачей его в $.each:

$.each(superMarios.slice(2), function(i, val){
  console.log(i + ': ' + val);
  tds.eq(i).append(val);
});

Примечание: slice не повлияет на ваш исходный массив. Скорее, он вернет копию части вашего массива.

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