2010-01-10 69 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