I have this HTML:
<ul>
<div>
<li>a</li>
<li>b</li>
<li class="break">c</li>
<li>d</li>
<li>f</li>
</div>
</ul>
What I want is where class="break"
I want the parent div
closed and a new one opened so I end up with this:
<ul>
<div>
<li>a</li>
<li>b</li>
</div>
<div>
<li>c</li>
<li>d</li>
<li>f</li>
</div>
</ul>
Now I've tried this:
$(".break").before("</div><div>");
but jQuery doesn't act as I'd expect and instead rewrites what I have entered and puts an empty div
instead. Like so:
<ul>
<div>
<li>a</li>
<li>b</li>
<div></div>
<li class="break">c</li>
<li>d</li>
<li>f</li>
</div>
</ul>
So how can I achieve what I am after?
Assuming you have the following markup:
<ul>
<li>a</li>
<li>b</li>
<li class="break">c</li>
<li>d</li>
<li>f</li>
</ul>
And you want to transform it into:
<ul>
<li>a</li>
<li>b</li>
</ul>
<ul>
<li class="break">c</li>
<li>d</li>
<li>f</li>
</ul>
You can use nextAll() with andSelf() to get the elements you want to move, then create a new <ul>
and use append() to relocate the elements:
var boundary = $("li.break");
$("<ul>").insertAfter(boundary.parent()).append(boundary.nextAll().andSelf());
You can see the results in this fiddle.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With