2012-02-10 70 views
3

试图计算检查的tr的总和。如何获取数字值​​

var totalqt=0; 
totalqt=totalqt + $(this).closest("tr").find("#qt").text(); 

它得到正确的值但它像数字不工作。例如,如果第一个td的值为1,第二个td的值为2,则它会提示12而不是1 + 2。尝试过text()和html()。同样的结果。怎么了?

+0

你是什么意思检查TR的,你可以发布一个快速的HTML片段。 – matchew 2012-02-10 15:49:55

回答

5
totalqt = totalqt + parseInt($(this).closest("tr").find("#qt").text(), 10); 
+0

总是需要指定parseInt的基础,例如parseInt(val,10),否则默认的假设偶尔不会是10,并且可以以八进制值结束等。 – 2012-02-10 15:50:51

+0

thx。 [f * ck这个愚蠢的字符限制] – heron 2012-02-10 15:51:02

+1

你不应该有多个具有相同ID的元素,所以你应该可以做'$(“#qt”).text()'。 – Zenexer 2012-02-11 06:09:19

3

您需要将字符串解析为int,以便可以像int一样使用它。

var totalqt=0; 
totalqt=totalqt + parseInt($(this).closest("tr").find("#qt").text(), 10); 

的10是因为:

的问题是如何parseInt函数猜测你的电话号码的基础。阅读 parseInt规范。它不是总是默认以10为基数,而是尝试 来猜测,如果第一个字符是'0',它认为你想要将 解析为八进制数,并且如果它以'0x'开头,它认为你想要十六进制的 。

2

text()返回一个字符串。你想要一个号码。使用parseInt

var totalqt = 0; 
totalqt = totalqt + parseInt($(this).closest("tr").find("#qt").text(), 10); 
+0

与其他答案不同,这一个也使用第二个参数来指定数字应该被转换的基数,所以这比其他答案安全得多。 – daniels 2012-02-10 15:53:14

4

您需要解析值为数字,这将或者使用parseInt函数(VAL,基地)或parseFloat(缬氨酸,基地)进行:

在你的榜样,你会使用:

var totalqt=0; 
totalqt=totalqt +parseInt($(this).closest("tr").find("#qt").text(), 10);