我有这样的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字符串并将它们放回去?
答案 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,因为它们是非标准的。