5

我正在使用 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>");
}

不幸的是,这将从下一个父菜单中获取子 li,以填充 div 中 3 li 的“配额”。这当然会严重破坏我的菜单。有关示例,请访问此处。

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

4

2 回答 2

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>");
  }
});
于 2010-08-02T06:33:24.423 回答
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 上,这不好.. ;)

于 2010-08-02T06:28:55.587 回答