计算属性值的总计的最佳方法

时间:2012-10-17 11:54:04

标签: jquery

我正在尝试获取属性值的总计。该值可以是货币总和,例如。 $29.99或文本字符串,例如。 sold

我正在使用以下代码,我确信这是不正确的。我得到的返回值为NaN,我知道这意味着“不是数字”。我有一种感觉,我可能无法正确删除文本字符串,美元符号,逗号或三者。

非常感谢任何提供正确解决方案的帮助。谢谢。

var total = parseFloat($('span.buyoffer').attr('data-price').replace(/[A-Za-z$-]/g, ""));

3 个答案:

答案 0 :(得分:0)

var total;
$.each($('span.buyoffer'), function(i,v) {
    var val = $(v).attr('data-price');
    if ($.isNumeric(val)) {
        total = total + val
    }
});
//here you will have the total value

答案 1 :(得分:0)

parseFloat('')返回NaN - 您必须先将空字符串转换为数字。最简单的方法是从中减去0

var total = parseFloat(($('span.buyoffer').attr('data-price').replace(/[A-Za-z$-]/g, "")) - 0);

另外@Rory McCrossan是正确的,首选使用.data(),所以:

var total = parseFloat(($('span.buyoffer').data('price').replace(/[A-Za-z$-]/g, "")) - 0);

但是,如果您只有一个<span class="buyoffer">元素,这仍然有用。要计算所有匹配元素的总和,您需要迭代每个元素:

var total = 0;
$('span.buyoffer').each(function(index, element) {
    total += $(element).data('price').replace(/[A-Za-z$-]/g, "") - 0;
});

答案 2 :(得分:0)

http://jsfiddle.net/p324u/

var sum = 0;
$("span.buyoffer").each(function() {
  var price = +($(this).attr("data-price").replace(/[^\d\.]/g, ""));
  sum += price;
});