jquery add或slice

时间:2010-01-10 09:37:37

标签: jquery add slice

我试图在div中包含一定数量的元素。问题是元素的数量可能会根据用户的输入而有所不同。因此元素的数量可以是2,3,4甚至更多。我有一个变量告诉我应该包含多少元素。所以,例如,我的页面可能有这个:

<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秒。应该将3包裹在一起,所以我应该有3个新div s,前2个为3,最后2个为2,因为只有8 div个。但是,我在第一个新div中获得了3 div s,然后接下来的2个div没有被包裹,然后最后3个div被包裹在一个新的div。我不确定为什么它没有正确包装。您对如何做到这一点甚至更好的方法有任何想法吗?

1 个答案:

答案 0 :(得分: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