2017-06-15 59 views
0

您好,jQuery的动态计算的NaN

我有一个问题与jQuery,我真的不明白为什么。我对jQuery并不陌生,但让我们说我有很多东西要学。

问题是我有一个生成的列表,其中包含一个跨度。 <span class="cost-value">7.040,00</span>。这不是唯一的,它们有一整行。现在,我想要的是跨度的每个值都被添加到数字中,以便我得到所有这些数字的总和。

为此,我写了下面的代码。

function countCart(){ 

    var sum = 0; 
    $(".cost-value").each(function() { 
     sum =+ Number($(this).html()); 
    }); 

    $('.cost-total').html(sum); 

} 

然而,测试时,sum不会返回NaN。我在这里做错了什么?我试着用数据属性来做,结果也是一样。

更新:好的。我试过一些建议。代码如下:

function countCart(){ 

    var sum = 0; 
    $(".cost-value").each(function() { 
     sum += $(this).data("cost"); 
    }); 

    console.log(sum); 
    $('.cost-total').html(sum); 

} 

但是,这会将每个数字加到字符串中。我希望所有的数字都加在彼此之间,这样我就可以得到一个数字。

+0

您的跨度不具有数据成本属性。将数据成本='7.040,00'添加到您的跨度,然后重试。 –

+0

或使用'sum + = Number($(“this).text())' –

+0

使用'.text()'而不是'.html()' - 但在这种情况下应该是一样的。 '= +'而不是'+ =' –

回答

0

使用parseFloat而不是使用“类”Number

Number预计一个数字值而htmltextattrdata函数返回一个字符串。

所以,你的代码看起来就像这样:

​​

编辑:您使用的是本地化的字符串,所以parseFloat不应该工作。您最好的“赌注”是将“原始”值放在data属性中,并用data函数(不省略使用parseFloat)检索该值。

这里是我的建议代码:

function countCart(){ 
 
    var sum = 0; 
 
    $(".cost-value").each(function() { 
 
     sum += parseFloat($(this).data("cost")); 
 
    }); 
 
    $('.cost-total').html(sum.toLocaleString("de-DE", {minimumFractionDigits: 2})); 
 
} 
 

 
countCart();
.cost-total { 
 
    color: red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<span class="cost-value" data-cost="7040.00">7.040,00</span> 
 
<span class="cost-value" data-cost="3040.00">3.040,00</span> 
 
<span class="cost-value" data-cost="2040.00">2.040,00</span> 
 
<span class="cost-value" data-cost="1040.00">1.040,00</span> 
 
<span class="cost-total"></span>

+0

'Number(“123”)''可以正常工作,所以传递一个字符串并不是问题,尽管同意'parseFloat'。 –

+0

但字符串是本地化的。看看成千上万的分手和小数。 –

+0

确实 - 这就是为什么'Number'失败(7.040,00不被识别为数字) - *然而* parseFloat *也有*相同的问题,只是忽略了它不喜欢的位 - 所以本地化的7.040,00 (我假设意味着7000和40)被解析为7.04(7点零4)。 –