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

jQuery: Content of html element is interpreted as a string, not an integer

本文关键字:字符串 整数 解释 元素 html      更新时间:2023-09-26

当有人喜欢我网站上的评论时,在数字右侧添加一个"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元素的值作为一个字符串,即使它是一个数字?有什么建议吗?

因为JavaScript将num.html()解释为文本。+符号的字符串在javascript中意味着连接,但-并不意味着,所以在这种情况下,javascript意识到你想做数值计算。这就是为什么它适用于-

您应该使用parseInt()oldnum转换为整数

您需要将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
}

或者,+oldnum做与Number(oldnum)相同的事情。

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();