2016-03-26 27 views
0

我有一个表头<th>被默认设置为0jQuery的不必要的总和结果

<th id="total_price" style="text-align:center">0</th> 

现在,当我添加一个新的出售项目,价格应加入的这个<th>值。所以,如果新的是20000,那么值应该是20000+0=20000而不是200000。如果我添加另一个项目,价格为30 000,现在就像20000030 000

这是jQuery脚本:

 var initial = $("#total_price").text(); 
     console.log(initial); 
     var newPrice = initial + (res['price']); 
     console.log(newPrice); 
     $("#total_price").text(newPrice); 

我尝试这样做:

 var initial = $("#total_price").text(); 
     console.log(initial); 
     var newPrice = initial + +(res['price']); 
     console.log(newPrice); 
     $("#total_price").text(newPrice); 

但仍然是相同的。

enter image description here

+0

你必须使用'parseInt函数()'。 “+”运算符用于添加和串联字符串。另外,当你阅读DOM元素的文本时,它被读为字符串而不是数字 – Rajesh

+1

你有一个正确的解决方案,但忘记把'+'放在'initial'后面,因为那也是一个字符串。 '+ initial + +(res ['price']);' –

+0

如果你想要小数,你应该改为使用parseFloat。另外,如果你想要像“30 000”或“30,000”这样的东西被识别为30000,你必须先把它们除掉。做一些类似'res ['price']。replace(/ [,]/g,'')' – David784

回答

4

您需要分析文本(字符串)到一个整数,然后添加它。所以做下面为您计算

var newPrice = parseInt(initial,10) + parseInt(res['price'],10); 

否则what you are trying would be a string concatenation and not a Sum

你可以得到More info Here

1

正如我已经评论说,当你阅读从DOM元素的文字,它的读取字符串,当您将+运算符应用于它时,将其视为级联和加法运算。

下面是一个模拟:

(function(){ 
 
    var th = $("th"); 
 
    var result = ""; 
 
    
 
    result += "Direct addition: " + $(th[0]).text() + $(th[1]).text() + "<br/>"; 
 
    result += "Type: " + typeof($(th[0]).text()) + "<br/>"; 
 
    result += "Parse Int: " + (parseInt($(th[0]).text()) + parseInt($(th[1]).text())) + "<br/>"; 
 
    $("#result").html(result); 
 
})()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
 
<table> 
 
    <tr> 
 
    <th>20000</th> 
 
    <th>0</th> 
 
    </tr> 
 
</table> 
 
<p id="result"></p>

也可做参考下面的帖子:parseInt vs unary plus