-1

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

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

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

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

3 回答 3

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
于 2012-10-17T11:59:26.997 回答
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;
});
于 2012-10-17T12:00:23.843 回答
0

http://jsfiddle.net/p324u/

var sum = 0;
$("span.buyoffer").each(function() {
  var price = +($(this).attr("data-price").replace(/[^\d\.]/g, ""));
  sum += price;
});
于 2012-10-17T12:04:57.427 回答