.slice和.wrapall

csb*_*rne 5 jquery slice wrapall

我正在使用stackoverflow上的成员建议的一些代码,并由我调整以包装每个3列表项作为大型菜单的一部分.代码是:

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

不幸的是,这将从下一个父菜单中获取子li,以填充div中3 li的'quota'.这当然是大大搞砸了我的菜单.有关示例,请访问此处.

有没有人有任何建议如何解决这个问题?

jAn*_*ndy 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>");
  }
});
Run Code Online (Sandbox Code Playgroud)