当有人喜欢我的网站上的评论时,会在显示喜欢数量的数字右侧添加“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元素的值解释为字符串,即使它是一个数字?有什么提示吗?
答案 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
}
或者,+oldnum
与Number(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();