You could check every .A
element if its next neighbor not has class B
. If so then add <div class="B"></div>
in between.
jQuery
$(".A").each(function() {
var a = $(this),
n = a.next("div");
if (n.length && n.hasClass("B") === false) {
a.after('<div class="B">B</div>');
}
});
.B { color: red }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="A">A</div>
<div class="C">C</div>
<div class="A">A</div>
Vanilla JS
document.querySelectorAll(".A")
.forEach(a => {
const n = a.nextElementSibling || { tagName: "" };
if (n.tagName === "DIV" && n.classList.contains("B") === false) {
a.insertAdjacentHTML("afterEnd", '<div class="B">B</div>');
}
});
.B { color: red }
<div class="A">A</div>
<div class="C">C</div>
<div class="A">A</div>
Or if you know .A
and .C
then you could use the adjacent sibling combinator (+
) to find all .C
elements that are direct siblings of .A
.
jQuery
$(".A + .C").before('<div class="B">B</div>');
.B { color: red }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="A">A</div>
<div class="C">C</div>
<div class="A">A</div>
Vanilla JS
document.querySelectorAll(".A + .C")
.forEach(c => {
c.insertAdjacentHTML("beforeBegin", '<div class="B">B</div>');
});
.B { color: red }
<div class="A">A</div>
<div class="C">C</div>
<div class="A">A</div>