2010-01-10 38 views
1

我试图在div中包装一定数量的元素。问题是元素的数量可能会根据用户的输入而有所不同。所以元素的数量可以是2,3,4甚至更多。我有一个变量,告诉我应该包装多少个元素。所以,举例来说,我的页面可能有这样的:jquery添加或切片

<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,前2个中有3个,最后2个,因为只有8个div s。但是,我在第一个新的div中获得了3 div s,然后接下来的2 div完全不被包装,然后最后的3 div被包装在新的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 2010-01-10 09:52:49

+0

确保你使用'i = 0',并且你还没有忘记'.next()'的地方。它应该运作良好,你可以请张贴一个最小的例子,如果这不起作用? (尝试http://jsbin.com/) – Kobi 2010-01-10 09:56:05

+0

它的奇怪它在ie中工作,但不是在Firefox中。还注意到最后一张图片没有被包裹。我假设它可能是因为第一个不被包装。 – ngreenwood6 2010-01-10 10:03:19