在jQuery中一次选择n个元素的最佳方法

rof*_*fle 2 jquery

我有ul一些li元素,我想要做的是:

  1. 如果有6个或更少的li元素,请将它们全部选中并将它们放入新元素中ul.
  2. 对于任何大于6个元素的数字,循环,选择6个元素,放入新的ul,从下一个li元素开始并继续.
  3. 如果最后剩下的元素少于6个,那么它们也会被放入一个新元素中ul.

如果我从5个li元素开始,我希望最终得到1个ul元素和5个li孩子.

如果我从40个li元素开始,我希望最终得到7个ul元素,6个有6个li孩子,1个有4个元素.

在jQuery中处理这个问题最有效的方法是什么?

Nic*_*ver 7

您可以通过循环和使用.slice()来实现.wrapAll(),如下所示:

var lis = $("#myUL li");
for(var i = 0; i < lis.length; i+=6) {
  lis.slice(i, i+6).wrapAll("<li><ul></ul></li>");
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里测试一下.请注意,此版本在原始内部创建嵌套 <ul>元素(在它们自己内部,<li>因此它是有效的).如果你不想那样并且想要替换原件<ul>,.unwrap()首先是这样的:

var lis = $("#myUL li").unwrap();
for(var i = 0; i < lis.length; i+=6) {
  lis.slice(i, i+6).wrapAll("<ul></ul>");
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里测试那个版本.