.slice and .wrapall

牧云@^-^@ 提交于 2019-12-01 18:15:53

问题


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?


回答1:


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



回答2:


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.. ;)



来源:https://stackoverflow.com/questions/3385430/slice-and-wrapall

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!