Каков наилучший способ вырваться из оператора .each () jquery? - PullRequest
5 голосов
/ 29 декабря 2011

У меня есть следующий код:

$.each(data.People, function (i, person) {
   html.push("<img title='" + person.Name + "' height='45' width='45' src='" + person.Picture + "' /> ");
        });

Я хочу изменить этот код, так что если массив (data.People) имеет более 20 человек, он будет делать то же, что и выше, для первого20 человек, а затем просто показывают текст, говорящий «Х», больше людей ... так, например, если в массиве было 100 человек, он отобразит первые 20, а затем просто скажет «еще 80 человек ...»

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

Ответы [ 2 ]

14 голосов
/ 29 декабря 2011

return false прерывает цикл each в jQuery, точно так же, как цикл break в for в простом JavaScript. И return true это как continue.

Для части X вам необходимо получить length итерируемой коллекции, поскольку each, к сожалению, не предоставляет эту информацию.

Итак, в вашем случае:

$.each(data.People, function (i, person) {
   if (i == 20) {
     html.push("<p>" + (data.People.length - i) + " more people...</p>");
     return false;
   }
   html.push("<img title='" + person.Name + "' height='45' width='45' src='" + person.Picture + "' /> ");
});
7 голосов
/ 29 декабря 2011

Ваш счетчик i в вашем коде.Все, что вам нужно сделать, это return false, когда я == 20, чтобы завершить каждый.

$.each(data.People, function (i, person) {
  if (i == 20) { return false; }
  html.push("<img title='" + person.Name + "' height='45' width='45' src='" + person.Picture + "' /> ");
});
...