.slice 和 .wrapall

发布于 2024-09-12 02:02:42 字数 352 浏览 6 评论 0原文

我正在使用 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 的“配额”。这当然严重扰乱了我的菜单。 例如,请访问此处。

有人对我如何解决这个问题有任何建议吗?

I'm using a bit of code suggested by a member on stackoverflow and adapted by me to wrap every 3 list items as part of a mega menu. The code is:

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

Unfortunately this will grab child li's from the next parent menu to fill up the 'quota' of 3 li's in a div. This is of course massively messing up my menus. For an example please visit here.

Does anyone have any suggestion how I could fix this up?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

傲鸠 2024-09-19 02:02:42

你的问题是你的选择器。由于 sizzle 从右到左工作,因此它只会查询所有以 UL 元素 作为直接父元素的 LI 元素(通常始终是案件)。

因此,请分隔您的 UL

$('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>");
  }
});

Your problem is your selector. Since sizzle works right to left, it will just query all LI elements which have an UL element as direct parent (which usually, is always the case).

So, seperate your 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>");
  }
});
还不是爱你 2024-09-19 02:02:42

您是否尝试过使用类作为 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 上,这是不好的..;)

have you tried applying it withe the use of the class as ht selector like this?

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>");
}

But if you did not know, I'm warning you that you are breaking the dom.. you are putting div on ul which is not good.. ;)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文