Reputation: 151
I am trying to wrap every group of elements with a same class under a wrapper delimitated by another specific element with different class.
If my code looks like this:
<div class="container">
<div class="box">box1</div>
<div class="box">box2</div>
<div class="box">box3</div>
<div class="box">box4</div>
<h2>heading2</h2>
<div class="box">box1</div>
<div class="box">box2</div>
<div class="box">box3</div>
<div class="box">box4</div>
<h2>heading2</h2>
<div class="box">box1</div>
<div class="box">box2</div>
<div class="box">box3</div>
<div class="box">box4</div>
</div>
I essentially would like it to be like this:
<div class="container">
<div class="wrapper">
<div class="box">box1</div>
<div class="box">box2</div>
<div class="box">box3</div>
<div class="box">box4</div>
</div>
<h2>heading2</h2>
<div class="wrapper">
<div class="box">box1</div>
<div class="box">box2</div>
<div class="box">box3</div>
<div class="box">box4</div>
</div>
<h2>heading2</h2>
<div class="wrapper">
<div class="box">box1</div>
<div class="box">box2</div>
<div class="box">box3</div>
<div class="box">box4</div>
</div>
</div>
I tried the next, which seems to work at some level and wraps it that way, but for some reason, each '.box' element gets wrapped individually too.
$(".box").each(function (index) {
$(this).nextUntil("h2").addBack().wrapAll("<div class='wrapper' />");
});
Any idea how to avoid the elements to get wrapped too?
Thanks in advance,
Upvotes: 0
Views: 30
Reputation: 162
i think below perfectly for your query, try it.
var li = $(".box");
for(var i = 0; i < li.length; i+=4) {
li.slice(i, i+4).wrapAll("<div class='wrapper'></div>");
}
//$('.box:nth-child(3n)').wrapAll('<div class="wrapper"></div>');
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
<div class="box">box1</div>
<div class="box">box2</div>
<div class="box">box3</div>
<div class="box">box4</div>
<h2>heading2</h2>
<div class="box">box1</div>
<div class="box">box2</div>
<div class="box">box3</div>
<div class="box">box4</div>
<h2>heading2</h2>
<div class="box">box1</div>
<div class="box">box2</div>
<div class="box">box3</div>
<div class="box">box4</div>
</div>
Upvotes: 1