.slice 和 .wrapall

Posted

技术标签:

【中文标题】.slice 和 .wrapall【英文标题】:.slice and .wrapall 【发布时间】:2011-03-24 01:28:21 【问题描述】:

我正在使用 *** 上的一位成员建议的一些代码,并由我改编以将每 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 的“配额”。这当然会严重破坏我的菜单。 如需示例,请访问此处。

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

【问题讨论】:

如果从ul &gt; li 中删除&gt; 会怎样? 【参考方案1】:

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

【讨论】:

【参考方案2】:

你的问题是你的选择器。由于sizzle 从右到左工作,它只会查询所有具有UL element 作为直接父级的LI elements(通常总是如此)。

所以,分开你的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>");
  
);

【讨论】:

感谢安迪的信息 - 抱歉,我对 jQuery 很陌生。我想我理解你所说的背后的逻辑,但不幸的是,我无法获得你发送的代码 sn-p 用于我上面包含的演示......这也不会最终将每 3 li 包装在一个页面上?将 ul.list-content 指定为 ul 会更好吗?感谢您的任何建议 hmmn - 抱歉,上面的代码仍然不满意。它对你有用吗? @csbourne:好吧,我在 jsfiddle.net/cbnFX 胡闹,它至少可以满足我的期望 :) 但我没有那个插件可用。 抱歉,我的代码中有一个小错误。您是救生员 - 感谢您的帮助!

以上是关于.slice 和 .wrapall的主要内容,如果未能解决你的问题,请参考以下文章

javascript中slice和substring的区别

Codecs系列编解码基础知识---并行特性:Slice, Tile和WPP

slice()函数创建一个slice对象

Python中的分片(slice)问题?

比较array和slice

在 golang 中有 nil slice 和 empty slice 有啥意义?