jquery包装相邻元素的组

前端之家收集整理的这篇文章主要介绍了jquery包装相邻元素的组前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个允许用户页面上插入内容块的cms.用户可以使用不同类型的内容块,它们可以按任何顺序插入.高级dom结构的示例可能如下所示:
<p>Some rich text</p>

<div class="Box">...</div>
<div class="Box">...</div>
<div class="Box">...</div>

<h3>Some  more rich text</h3>
<p>Lorem ipsum</p>

<div class="Box">...</div>
<div class="Box">...</div>

我想要做的是在包装’容器’div中包装任何相邻的’Box’div.因此,在上面的示例中,将插入两个“容器”div,因为有两组Box div,导致:

<p>Some rich text</p>

<div class="container">
    <div class="Box">...</div>
    <div class="Box">...</div>
    <div class="Box">...</div>
</div>

<h3>Some  more rich text</h3>
<p>Lorem ipsum</p>

<div class="container">
    <div class="Box">...</div>
    <div class="Box">...</div>
</div>

我不认为有一个聪明的方法来使用css选择器,所以有人知道无论如何用jQuery做到这一点?

解决方法

好吧你可以这样做 JSFiddle example我刚刚鞭打了.

这基本上循环遍历每个.Box,将其添加到数组并确定下一个元素是否也具有.Box类:

var collection = [];
$('.Box').each(function() {
    var nextBox = $(this).next().hasClass('Box');
    ...
    collection.push($(this));
})

如果下一个元素没有.Box类,它会创建包含分隔符,在集合数组中第一个.Box之前将其放在页面上,然后使用appendTo将所有.Box分隔符移动到其中:

if(!nextBox)
    {
        var container = $('<div class="collection"></div>');
        container.insertBefore(collection[0]);
        for(i=0;i<collection.length;i++)
        {
            collection[i].appendTo(container);
        }
        collection = [];
    }
原文链接:https://www.f2er.com/jquery/180637.html

猜你在找的jQuery相关文章