1

我想使用 JCarousel 显示 LI 的 UL 元素,其中 LI 仅包含八张图像(两行四张),看起来像这样:
<li>
<div>
[image][image][image][image]
[image][image][image][图像]
</div>
</li>
<li>
<div>
[图像] [图像] [图像] [图像]
[图像] [图像] [图像] [图像]
</div>
</li>

我认为这样做的一个好方法是使用after()添加一些关闭和打开标签,如下所示:

$(".jcarousel-item img:nth-child(9)").after(</div></li><li><div>);

但我想我误解了 的性质after(),因为它似乎不会插入结束标签,除非它们以开始标签开头。

有没有更好的方法来做到这一点wrapInner()

4

1 回答 1

1

所以你从一个单一的开始,一个包含一大堆图像的单一 & 你想把它分成一组uls ,每个包含 8 个图像对吗?如果是这样,这将起作用:lidivli

var images = $("img");
while (images.length > 8) {
    images.slice(8, 16).appendTo("ul").wrapAll("<li><div></div></li>");
    images = images.slice(16);
}

基本上,它从图像集合中切下 8 个图像块,并将它们附加到ul它们自己li的 s 中(它将原始li图像与第 8 个图像一起保留)。显然,您需要调整选择器,因为您的页面上可能有其他图像和无序列表。

编辑:解释为什么.after不按您期望的方式工作的原因 - 我相信 jQuery 试图操纵 DOM 而不是原始 HTML。所以你不能只是附加随机的 HTML 块,除非它们可以被解析并变成实际的 DOM 节点。换句话说,您传递给的内容.after必须是有效且完整的 HTML 片段。所以,因为 jQuery 无法解决如何将“ </div></li><li><div>”之类的东西变成一个节点,所以它的行为有点奇怪(我猜在这种情况下它会忽略两个初始关闭标签,因为它们在他们的拥有&然后创建li&div节点&然后有效地为您自动关闭它们)。

于 2009-07-31T01:12:57.177 回答