我正在尝试获取属性值的总计。该值可以是货币总和,例如。 $29.99
或文本字符串,例如。 sold
。
我正在使用以下代码,我确信这是不正确的。我得到的返回值为NaN
,我知道这意味着“不是数字”。我有一种感觉,我可能无法正确删除文本字符串,美元符号,逗号或三者。
非常感谢任何提供正确解决方案的帮助。谢谢。
var total = parseFloat($('span.buyoffer').attr('data-price').replace(/[A-Za-z$-]/g, ""));
答案 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)
var sum = 0;
$("span.buyoffer").each(function() {
var price = +($(this).attr("data-price").replace(/[^\d\.]/g, ""));
sum += price;
});