点击任何货币(例如$ 44,721.90)应自行提取并返回$ 0。
目前正在返回$ NaN。我正在使用ES6 Intl.NumberFormat(“en-US”)为数字提供货币格式。
…
在 var difference ,你正在选择一个带有的字符串 $ 和 , ,这在一个数字中无效。你需要从字符串中取出那些字符串,如下所示:
var difference
$
,
var difference = parseFloat($(this).find('.budget').text().replace(',','').replace('$','')) - parseFloat($(this).find('.budget').text().replace(',','').replace('$',''));
看到 这个jsfiddle 。
编辑:
如果您决定使用美元符号以外的其他内容,则可以使用正则表达式 /[0-9\.]+/g 相反。我认为这个解决方案实际上要好得多。 这里的 一个jsfiddle,我用一个替换了前者的变化 getFloat() 功能。这适用于任何种类的货币。
/[0-9\.]+/g
getFloat()
你不能使用 var difference = $(this).find('.budget') - $(this).find('.budget'); 因为那些是jQuery对象,如果你想使用这些的数值,我建议你最初使用它们存储它们 data- 属性。
var difference = $(this).find('.budget') - $(this).find('.budget');
data-
例:
var name1 = { name: "John", money: 44721.90 }; var name2 = { name: "Mayer", money: 16715.79 }; var names = [name1, name2]; function show() { var numFormat = new Intl.NumberFormat("en-US"); for (var i = 0; i < names.length; i++) { // I've added a data-rawvalue attribute, which will store the raw value for you to use in sums $(".money").append('<div class="extract' + [i] + '"><span class="name">' + names[i].name + ' </span><span class="budget" data-rawvalue="' + names[i].money + '"> $' + numFormat.format(names[i].money) + '</span></div><br>'); } } show(); function extraction() { for (var i = 0; i < names.length; i++) { $(".extract" + [i]).click(function() { var currentCoin = $(this).find('.budget'); // Here, we use .data("rawvalue") to get the raw value we stored earlier var difference = $(this).find('.budget').data("rawvalue") - $(this).find('.budget').data("rawvalue"); $(currentCoin).html('$' + difference); }) } } extraction();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="money"></div>