我可以使用jQuery .wrap或.wrapInner来包装一组不同的元素吗?

时间:2018-01-05 16:19:46

标签: javascript jquery

我有这样的HTML结构:

<section>
  <item>
    <ele class="blue" />
    <ele class="green" />
    <ele class="red" />
  </item>
  <item>
    <ele class="blue" />
    <ele class="green" />
    <ele class="red" />
  </item>
  <item>
    <ele class="blue" />
    <ele class="green" />
    <ele class="red" />
  </item>
</section>

我需要将每个<item>中的第二个两个元素包装在一个新div中,以便它看起来如下所示:

<item>
  <ele class="blue" />
  <div class="extra-wrapper">
    <ele class="green" />
    <ele class="red" />
  </div>
</item>

是否可以使用任何jQuery wrap函数来实现此目的?或者是否有另一种方法,无需过滤每个项目,找到匹配的元素,构建一个新的HTML字符串并将它们放回去?

1 个答案:

答案 0 :(得分:1)

要执行此操作,您可以循环遍历每个.blue元素,获取以下所有兄弟节点并在其上调用wrapAll(),如下所示:

$('.blue').each(function() {
  $(this).nextAll().wrapAll('<div class="extra-wrapper"></div>');
});
.extra-wrapper {
  border: 1px solid #C00;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<section>
  <div>
    <div class="blue">blue</div>
    <div class="green">green</div>
    <div class="red">red</div>
  </div>
  <div>
    <div class="blue">blue</div>
    <div class="green">green</div>
    <div class="red">red</div>
  </div>
  <div>
    <div class="blue">blue</div>
    <div class="green">green</div>
    <div class="red">red</div>
  </div>
</section>

请注意,我将<ele /><item />元素更改为div,因为它们是非标准的。