2015-06-22 5 views
0

У меня есть ниже html структуру:

<div class="thumbnail"></div> 
<div class="thumbnail"></div> 
<div class="thumbnail"></div> 
<div class="thumbnail"></div> 
<div class="thumbnail"></div> 
<div class="thumbnail"></div> 
<div class="thumbnail"></div> 
<div class="thumbnail"></div> 

Теперь к группе/обернуть каждый 4 элемента в отдельном div я сделал, как показано ниже:

var div=$('.thumbnail'); 
for(var i = 0; i < div.length; i+=4) { 
    div.slice(i, i+4).wrapAll("<div class='new'></div>"); 
}; 

Мой вопрос: есть ли способ преобразовать этот конкретный цикл в $.each или это for loop только способ сделать это?

UPDATE

Это не дублировать, потому что ответ упоминается там с помощью JQuery $.each не работает, как ожидалось, и это было специфичны для упаковки divs может быть на любой технике и мой вопрос относится к обертке с $.each. Я не вижу в этом дубликата!

Pen, чтобы показать, как $.each ответ там работает!

+2

Это не просто [этот ответ] (http://stackoverflow.com/a/13279336/1338292)? –

+1

В этом случае цикл for будет лучшим выбором –

+0

@ Ja͢ck Oh yea !! Но это какой-то плагин, который нам нужно создать правильно? Нет ли простого способа? Я имею в виду, что jquery облегчает жизнь разработчику, поэтому подумал, есть ли замена для подобных циклов в jquery! –

ответ

5

JQuery только путь будет перебрать nth-child(4n)

$('.thumbnail:nth-child(4n)').each(function(){ 
    $(this) 
     .prevAll('.thumbnail').andSelf() 
     .wrapAll($('<div/>',{class:"new"})) 
}); 

Demo

Учитывая сложность, не уверен, является ли prevAll() работает лучше, чем на равнине для петли.

Ссылаясь один из моих similar answer here

+0

Просто превосходно !! Спасибо за просветление! :) –

+1

Спасибо. Рад помочь. –

+0

В небольшом документе вы, вероятно, не увидите большой разницы, но введение этой сложности для устранения смиренной петли не похоже на это; также, что, если элементы обернуты элементами, которые имеют одно и то же имя класса, это не будет работать так же внезапно. –

1

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

$.fn.wrapEvery = function(n, html) { 
    for(var i = 0; i < this.length; i+=n) { 
     this.slice(i, i+n).wrapAll(html); 
    } 
}); 

Тогда, называется, как:

$('.thumbnail').wrapEvery(4, "<div class='new'></div>"); 

Или более общая функция куска от earlier answer.

$.fn.every = function(n) { 
    var arr = []; 
    for (var i = 0; i < this.length; i+=n) { 
     arr.push(this.slice(i, i+n)); 
    } 
    return this.pushStack(arr, "every", n); 
} 

Вызывается как:

$('.thumbnail').every(4).wrap('<div class="new"></div>'); 
+0

Спасибо, друг! «плагин» тоже будет отличной идеей !! Спасибо за ваши усилия и объяснения !! +1 –