Так что в основном у меня есть система, которая показывает, что вы часто покупаете вместе вещи. Однако мне нужно отобразить значение для всего пакета, в основном элемент 1 + элемент 2 + элемент 3.
Итак, что я пытаюсь сделать, это взять промежуток, к которому добавлена цена, использовать для него метод $.text(), затем суммировать все числа, однако я не могу их получить, когда я использую parseFloat(), он возвращает NaN
моя функция getPrice выглядит так:
function getPrice(discount) {
var total_price = 0;
var active_products = 0;
$('.bundle-product-checkbox').each(function() {
if ($(this).prop('checked') == true) {
var price = parseFloat($('.bundle-fbt-price > .money').text());
total_price += price;
active_products++;
console.info(total_price);
}
});
if (active_products == $('.bundle-product-checkbox').length) {
var savings = (discount / 100) * total_price;
var discountedPrice = total_price - (discount / 100) * total_price;
$('.full-bundle-price').text(total_price + ' $').css("text-decoration", "line-through");
$('.discounted-bundle-price').text(discountedPrice + ' $');
$('.bundle-savings').text('You save ' + savings + ' $');
} else if (active_products == 0) {
$('.bundle-add').fadeOut('fast');
} else {
$('.full-bundle-price').text('Total Price: ' + total_price + ' $');
$('.full-bundle-price').css("text-decoration", "none");
$('.discounted-bundle-price').text('');
$('.bundle-savings').text('');
}
Мой html для этой части
{foreach from=$products item=p key=k}
<div style = "display:inline-block;float:left;width:100%;">
<input type = "checkbox" checked = "checked" class = "bundle-product-checkbox" name = "bundle-product-list" data-toggle = "{$k}" />
<span class = "bundle-title">{if $k==0 }<b>This Item: {/if}{$p.title} {if $k==0 }</b>{/if}</span>
{if isset($p.variants)}
{if $p.variants_count > 1}
<select class = "vitals_recommended_select bundle_fbt_select">
{foreach $p.variants item=v}
<option value = "{$v.id}" class = "bundle-fbt-money" data-vitals-price = "{if $display_currency_code}{$shop.money_with_currency_format|replace:array('{{amount}}','{{amount_with_comma_separator}}'):$v.price}{else}{$shop.money_format|replace:array('{{amount}}','{{amount_with_comma_separator}}'):$v.price}{/if}" data-vitals-discount = "{if $v.discount}-{$v.discount}%{else}0{/if}">{$v.title}</option>
{/foreach}
</select>
<p class = "vitals-product-price bundle-fbt-price">{if $display_currency_code}{$shop.money_with_currency_format|replace:array('{{amount}}','{{amount_with_comma_separator}}'):$p.variants[0].price}{else}{$shop.money_format|replace:array('{{amount}}','{{amount_with_comma_separator}}'):$p.variants[0].price}{/if} {if $p.variants[0].discount} <span class = "vitals-product-discount">-{$p.variants[0].discount}%</span>{/if}</p>
{else}
<p class = "vitals-product-price bundle-fbt-price">{if $display_currency_code}{$shop.money_with_currency_format|replace:array('{{amount}}','{{amount_with_comma_separator}}'):$p.variants[0].price}{else}{$shop.money_format|replace:array('{{amount}}','{{amount_with_comma_separator}}'):$p.variants[0].price}{/if} {if $p.variants[0].discount}<span class = "vitals-product-discount">-{$p.variants[0].discount}%</span>{/if}</p>
{/if}
{/if}
</div>
{/foreach}
Любые идеи?
Можете ли вы показать журнал $ ('. bundle-fbt-price> .money'). text ()
Я предполагаю, что $('.bundle-fbt-price > .money').text() содержит не только числовые значения, но, возможно, также символ валюты или, возможно, настоящие слова? - Сделайте console.info($('.bundle-fbt-price > .money').text()), чтобы увидеть, что вы пытаетесь обработать.
@UllasHunka, лог - VM598: 1 $ 91,00 долларов США 45 долларов США 229 долларов США
@ 31piy готово, отредактировал
@CristiDuma Как вы собираетесь анализировать все это как плавающее?
@ chŝdk ну что мне делать в таком случае?
@CristiDuma Вам нужно брать только числовые значения из входной строки. Я отправляю ответ.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Don't understand what's happening when I use parseFloat ?
Что ж, все, что происходит, - это то, что значения, которые вы пытаетесь проанализировать, не являются синтаксическими, потому что они начинаются с и содержат буквенные символы, поэтому они не могут быть проанализированы и вернут NaN.
Если значение, которое вы пытаетесь проанализировать, выглядит следующим образом:
VM598:1 $91.00 USD$45.00 USD$229.00 USD
Вам нужно обработать его, чтобы вы могли его проанализировать, вы можете использовать split и regexp, чтобы извлечь из него все значения.
Вот что вы можете сделать:
var content = "VM598:1 $91.00 USD$45.00 USD$229.00 USD";
var values = content.split(":")[1].split(/\$|USD/).filter((v, i) => {
return v !== "" && i > 0;
}).map(v => v.trim());
console.info(values);
var amounts = values.map(x => parseFloat(x));
console.info(amounts);Спасибо, сэр. Хороший ответ
Также покажите свой HTML.