jQuery:html元素的内容被解释为字符串,而不是整数

时间:2014-05-02 19:55:30

标签: javascript jquery

当有人喜欢我的网站上的评论时,会在显示喜欢数量的数字右侧添加“1”,但是当他们点击不喜欢时,它会更正数学。

例如:

14 + 1 = 141
14 - 1 = 13

的jQuery

var elem   = $('.like_button'), //Like button
    num    = $('.num_likes'), //Get the element: number of likes
    oldnum = num.html(); //Number of likes

if(elem.html() == "Like") {
    elem.html("Dislike");
    num.html(oldnum+1); //Adds one like after liking it
} else {
    elem.html("Like");
    num.html(oldnum-1); //Deletes one like after disliking it
}

我真的很想知道为什么不喜欢工作而不喜欢。

为什么javascript会将num元素的值解释为字符串,即使它是一个数字?有什么提示吗?

3 个答案:

答案 0 :(得分:4)

因为JavaScript将num.html()解释为文本。 javascript中字符串的+符号表示连接,但-并不代表,因此在这种情况下,javascript意识到您要进行数值计算。这就是为什么它与-

一起使用的原因

您应该将oldnum投射到parseInt()的整数。

答案 1 :(得分:1)

您需要将oldnum转换为数字:

if(elem.html() == "Like") {
    elem.html("Dislike");
    num.html(Number(oldnum)+1); //Adds one like after liking it
} else {
    elem.html("Like");
    num.html(Number(oldnum)-1); //Deletes one like after disliking it
}

或者,+oldnumNumber(oldnum)完全相同。

答案 2 :(得分:1)

Javascript将您网页上的文字解释为字符串。这是因为这是页面上的文字通常是什么。举个例子:

<span id="berliner">I am a jelly donut.</span>
<script LANGUAGE="Javascript">
document.getElementById("berliner").innerHTML;
// it only makes sense that this be a string, right?
</script>

现在,在JS中,您使用+符号来表示两件事:添加数字或将一个字符串放在另一个字符串之后。

var addingnumbers = 1+1;
// adding numbers, what you want
var a = "I am";
var b = " a jelly donut";
var addingstrings = a+b;
// adding strings, which you don't want.

因此,html被解释为通常应该是的字符串,但在这种情况下不应该。将字符串添加到另一个字符串只是将其附加到结尾,而不是数学。有一个简单的解决方案:通过将innerHTML乘以1将其转换为数字。不能对字符串进行乘法运算,因此JS会将其更改为数字形式,准备将其添加到其他内容中。

var oldnum = num.html()*1; // done! The multiplying has changed it to a number.

如果您确实希望将其更改回字符串,则可以使用toString()函数执行相反操作。

var aNumberToStartOutWith = 3;
var aStringToEndOffWith = aNumberToStartOutWith.toString();