Здесь есть пара вопросов.Во-первых, в HTML нет элемента <price>
.Я бы предложил вместо этого использовать span
с классом price
.
Во-вторых, вы не можете иметь div
элементов внутри p
, так как это недопустимый HTML.
Наконец, в этом случае вам нужно использовать find()
, чтобы выбрать элементы, на которые вы пытаетесь нацелиться, потому что они являются внуками .paymentContainer
и children()
смотрит только на дочерний уровень.Попробуйте это:
$('div.paymentContainer').each(function() {
$(this).children('p.savings').insertAfter($(this).find('p.pricing > .price'))
});
.paymentContainer {
border: 1px solid #CCC;
}
.savings {
color: #C00;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="paymentContainer">
<div>some content</div>
<p class="pricing">
<span class="price">$xxx.xx</span>
<span class="button">add to cart</span>
</p>
<p class="savings">Save $yy.yy</p>
</div>
<div class="paymentContainer">
<div>some content</div>
<p class="pricing">
<span class="price">$xxx.xx</span>
<span class="button">add to cart</span>
</p>
<p class="savings">Save $yy.yy</p>
</div>
<div class="paymentContainer">
<div>some content</div>
<p class="pricing">
<span class="price">$xxx.xx</span>
<span class="button">add to cart</span>
</p>
<p class="savings">Save $yy.yy</p>
</div>
С учетом всего сказанного, использование Javascript для переупорядочения таких элементов не является идеальным.Было бы лучше изменить источник HTML напрямую, если это возможно.