jquery 包装相邻元素组

标签 jquery css dom

我有一个允许用户在页面上插入内容 block 的 cms。用户可以使用不同类型的内容 block ,它们可以按任何顺序插入。一个高级 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 包装在一个包装“容器”div 中。因此,在上面的示例中,将插入两个“容器”div,因为有两组框 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 来做到这一点?

最佳答案

你可以使用

  1. .nextUntil , 得到所有的下一个 .box.
  2. .andSelf将当前元素添加到集合中
  3. .wrapAll将每个集合包装到不同的 .container

$('.box').not('.box+.box').each(function(){
  $(this).nextUntil(':not(.box)').addBack().wrapAll('<div class="container" />');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<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>

http://jsbin.com/gonino/edit?html,js

关于jquery 包装相邻元素组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15430851/

相关文章:

jquery 在提交之前验证所有字段

javascript - 如何制作倒计时器到jquery或js并带有倒计时时间(H :i:s)?

jquery animate css 在移动设备(android)上不够流畅?

jquery - Bootstrap 日期选择器的颜色特定日期

Java+DOM : How do I elegantly rename an xmlns:xyz attribute?

jquery - 我可以使用 jquery Mobile 创建基于桌面浏览器的 Web 应用程序吗?

javascript - jquery ui的sortable功能不适用于body缩放

html - 是否可能有一个元素 "pass through"结构规则?

javascript - JS vs DOM 时序 : . remove() 元素在视觉上发生,但 travesal 仍然包含它

javascript - 访问 DOM 节点