2010-01-10 2 views
1

Я пытаюсь обернуть определенное количество элементов в div. Проблема в том, что количество элементов может варьироваться в зависимости от ввода пользователя. Таким образом, количество элементов может быть 2, 3, 4 или даже больше. У меня есть переменная, которая сообщает мне, сколько элементов должно быть обернуто. Так, например, моя страница может иметь это:jquery add or slice

<div class="test"></div> 
<div class="test"></div> 
<div class="test"></div> 
<div class="test"></div> 
<div class="test"></div> 
<div class="test"></div> 

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

<div class="testing"> 
    <div class="test"></div> 
    <div class="test"></div> 
    <div class="test"></div> 
    </div> 

    <div class="testing"> 
    <div class="test"></div> 
    <div class="test"></div> 
    <div class="test"></div> 
    </div> 

Я использую этот код:

$(this).add($(this).next()) 
     .add($(this).next().next()) 
     .wrapAll('<div class="testing"></div>'); 

Проблема в том, что я должен был бы знать, сколько элементы будут там. Есть ли динамичный способ сделать это? Я также видел функцию slice и пытался использовать его как это:

for(var i=0;i<img_cnt;i+=img_row){ 
    obj.children().slice(i,i+img_row).wrapAll('<div class="row"></div>'); 
} 

Это не работает, хотя. У меня есть 8 div s. Это должно быть обертывание 3 вместе, поэтому у меня должно быть 3 новых div s с 3 в первых 2 и 2 в последнем, так как есть только 8 div s. Тем не менее, я получаю 3 div s в первом новом div, затем следующие 2 div s не обертываются вообще, а затем последние 3 div s обернуты в новый div. Я не уверен, почему это не делает это правильно. Есть ли у вас какие-либо идеи о том, как это сделать или, может быть, даже лучший метод?

ответ

5

Ваш код не работает, потому что children меняется. Попробуйте использовать slice на постоянном наборе:

var all = $('.test'); 
for(i=0; i < all.length; i += img_row) { 
    all.slice(i, i + img_row).wrapAll('<div class="row" />'); 
} 

Пример: http://jsbin.com/upaji

+0

Спасибо, что, кажется, работает, но по какой-то причине он пропускает первый элемент. Есть идеи? – ngreenwood6

+0

Убедитесь, что вы используете 'i = 0' и что вы не забыли' .next() 'где-то там. Он должен хорошо работать, можете ли вы разместить минимальный пример, где это не работает? (Попробуйте http://jsbin.com/) – Kobi

+0

его странный он работает, но не в firefox. также заметил, что последнее изображение не завернуто. Я предполагаю, что это, вероятно, потому, что первый не обернут. – ngreenwood6