2010-08-02 60 views
5

我使用了一個由stackoverflow上的成員建議的代碼位,並且由我修改爲將每3個列表項作爲大型菜單的一部分進行封裝。代碼是:.slice和.wrapall

var lis = $("ul > li"); 
for(var i = 0; i < ls.length; i+=3) { 
    lis.slice(i, i+3).wrapAll("<div class='new'></div>"); 
} 

不幸的是,這將抓住從下一個父菜單中的兒童li's填補3裏的'配額'在div中。這當然大大地搞亂了我的菜單。 有關示例,請訪問此處。

有沒有人有任何建議我怎麼能解決這個問題?

+1

如果從'ul> li'刪除'>'會怎麼樣? – 2010-08-02 06:26:21

回答

6

你的問題是你的選擇。由於sizzle從右到左工作,它只會查詢所有LI elements,其中有一個UL element作爲直接父級(通常始終是這種情況)。

所以,分開你的ULs

$('ul').each(function(){ 
    var $lis = $(this).children('li'); 
    for(var i = 0, len = $lis.length; i < len; i+=3){   
    $lis.slice(i, i+3).wrapAll("<div class='new'></div>"); 
    } 
}); 
+0

感謝您的信息安迪 - 道歉,但我很新的jQuery。我認爲我理解你說的背後的邏輯,但不幸的是,我無法得到你在上面包含的演示中發送的代碼片段......還有,這不是最終將每3頁的內容包裝在頁面上嗎?將ul.list-content指定爲ul會更好嗎? 感謝您的任何建議 – csbourne 2010-08-02 07:01:26

+0

hmmn - 對不起,仍然沒有上面的代碼喜悅。對你起作用嗎? – csbourne 2010-08-02 07:38:33

+0

@csbourne:好吧我在鬼混在http://www.jsfiddle.net/cbnFX/ 它至少做我期待的:)但我沒有那個插件可用。 – jAndy 2010-08-02 07:47:07

0

您是否嘗試過使用類作爲ht選擇器來應用它?

var lis = $("ul.list-content > li"); 
for(var i = 0; i < lis.length; i+=3) { 
    lis.slice(i, i+3).wrapAll("<div class='new'></div>"); 
} 

但是,如果你不知道,我警告你,你是打破了DOM ..你把DIV在UL這是不好的..;)