货币提取jQuery

时间:2016-11-15 13:52:31

标签: jquery arrays operations

点击任何货币(例如a[i])都应自行提取并返回$ 0。

目前正在返回$ NaN。我正在使用ES6 $44,721.90为数字提供货币格式。

Intl.NumberFormat("en-US")
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++) {
    $(".money").append('<div class="extract' + [i] + '"><span class="name">' + names[i].name + ' </span><span class="budget"> $' + numFormat.format(names[i].money) + '</span></div><br>');
  }
}

show();

function extraction() {
  for (var i = 0; i < names.length; i++) {
    //var text = $(".coin" + [i]).text();
    $(".extract" + [i]).click(function() {
      var currentCoin = $(this).find('.budget');
      var difference = $(this).find('.budget') - $(this).find('.budget');
      //var difference = (Number($(currentCoin).text().replace('$','')) - Number($(currentCoin).text().replace('$','')));
      $(currentCoin).html('$' + difference);
    })
  }
}

extraction();

2 个答案:

答案 0 :(得分:0)

var difference中,您选择的字符串中包含$,,该字符串在数字中无效。你需要从字符串中取出那些字符串,如下所示:

var difference = parseFloat($(this).find('.budget').text().replace(',','').replace('$','')) - parseFloat($(this).find('.budget').text().replace(',','').replace('$',''));

请参阅this jsfiddle

编辑:

如果您决定使用美元符号以外的其他内容,则可以使用正则表达式/[0-9\.]+/g进行匹配。我认为这个解决方案实际上要好得多。 Here's一个jsfiddle,我用getFloat()函数替换了前一个更改。这适用于任何种类的货币。

答案 1 :(得分:0)

你不能使用var difference = $(this).find('.budget') - $(this).find('.budget');,因为那些是jQuery对象,如果你想使用这些的数值,我建议你最初使用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>