Неверный результат суммы
Пытаюсь сделать вывод суммы итоговой экономии в заказе в woocommerce. Из таблицы оплаченного заказа должны быть взяты произведение количества (qtty) и значение ставки(price). Далее формируется итоговая сумма этих произведений по каждому товару(sum). Вроде бы скрипт валидный, но значения выходят не всегда верные, может не вижу чего, не подскажете?
$(document).ready(function() {
var sum = 0;
var qtty = $('strong.product-quantity').text().slice(2);
$("label.qtty").each(function() {
var price = $(this).text();
sum += parseFloat(price) * parseFloat(qtty);
});
alert(sum);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<tbody>
<tr class="woocommerce-table__line-item order_item">
<td class="woocommerce-table__product-name product-name">
<a href="/produit/creme1/">Creme1</a><label class="qtty">2</label> <strong class="product-quantity">× 1</strong> </td>
<td class="woocommerce-table__product-total product-total">
<span class="woocommerce-Price-amount amount">9,95<span class="woocommerce-Price-currencySymbol">$</span></span> </td>
</tr>
<tr class="woocommerce-table__line-item order_item">
<td class="woocommerce-table__product-name product-name">
<a href="/produit/creme2/">Creme2</a><label class="qtty">2</label> <strong class="product-quantity">× 5</strong> </td>
<td class="woocommerce-table__product-total product-total">
<span class="woocommerce-Price-amount amount">49,75<span class="woocommerce-Price-currencySymbol">$</span></span> </td>
</tr>
<tr class="woocommerce-table__line-item order_item">
<td class="woocommerce-table__product-name product-name">
<a href="/produit/creme3/">Creme3</a><label class="qtty">1</label> <strong class="product-quantity">× 1</strong> </td>
<td class="woocommerce-table__product-total product-total">
<span class="woocommerce-Price-amount amount">9,95<span class="woocommerce-Price-currencySymbol">$</span></span> </td>
</tr>
</tbody>
Ответы (2 шт):
var qtty = $('strong.product-quantity').text().slice(2); — это значение только первого элемента, которое получается один раз вне цикла, и используется для всех остальных элементов. Нужно перенести это дело внутри цикла и взять каждый элемент отдельно:
$(document).ready(function() {
var sum = 0;
$("label.qtty").each(function() {
var price = $(this).text();
var qtty = $(this).siblings('.product-quantity').text().slice(2);
sum += parseFloat(price) * parseFloat(qtty);
});
console.log(sum);
});
.qtty { color: red; }
.qtty + * { color: green; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tr class="woocommerce-table__line-item order_item">
<td class="woocommerce-table__product-name product-name">
<a href="/produit/creme1/">Creme1</a><label class="qtty">2</label> <strong class="product-quantity">× 1</strong> </td>
<td class="woocommerce-table__product-total product-total">
<span class="woocommerce-Price-amount amount">9,95<span class="woocommerce-Price-currencySymbol">$</span></span>
</td>
</tr>
<tr class="woocommerce-table__line-item order_item">
<td class="woocommerce-table__product-name product-name">
<a href="/produit/creme2/">Creme2</a><label class="qtty">2</label> <strong class="product-quantity">× 5</strong> </td>
<td class="woocommerce-table__product-total product-total">
<span class="woocommerce-Price-amount amount">49,75<span class="woocommerce-Price-currencySymbol">$</span></span>
</td>
</tr>
<tr class="woocommerce-table__line-item order_item">
<td class="woocommerce-table__product-name product-name">
<a href="/produit/creme3/">Creme3</a><label class="qtty">1</label> <strong class="product-quantity">× 1</strong> </td>
<td class="woocommerce-table__product-total product-total">
<span class="woocommerce-Price-amount amount">9,95<span class="woocommerce-Price-currencySymbol">$</span></span>
</td>
</tr>
</table>
Значения разные т.к. в функции вы складываете единственный элемент $('strong.product-quantity') cо ВСЕМИ элементами $("label.qtty")