Javascript jQuery:html元素的内容被解释为字符串,而不是整数
当有人喜欢我网站上的评论时,在显示喜欢的数量的数字右侧会添加一个“1”,但当他们单击“不喜欢”时,它会纠正数学错误 例如:Javascript jQuery:html元素的内容被解释为字符串,而不是整数,javascript,jquery,Javascript,Jquery,当有人喜欢我网站上的评论时,在显示喜欢的数量的数字右侧会添加一个“1”,但当他们单击“不喜欢”时,它会纠正数学错误 例如: 14 + 1 = 141 14 - 1 = 13 <span id="berliner">I am a jelly donut.</span> <script LANGUAGE="Javascript"> document.getElementById("berliner").innerHTML; // it only makes se
14 + 1 = 141
14 - 1 = 13
<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>
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元素的值解释为字符串,即使它是一个数字?有什么建议吗?您需要将
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)
相同的操作,您需要将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将num.html()
解释为文本。javascript中字符串的+
符号表示串联,但-
并不表示串联,因此在这种情况下,javascript意识到您想要进行数值计算。这就是为什么它与-
您应该使用
parseInt()
将oldnum
转换为整数,因为JavaScript将num.html()
解释为文本。javascript中字符串的+
符号表示串联,但-
并不表示串联,因此在这种情况下,javascript意识到您想要进行数值计算。这就是为什么它与-
您应该使用
parseInt()
将oldnum
转换为整数,Javascript将页面上的文本解释为字符串。这是因为页面上的文本通常是这样的。例如:
14 + 1 = 141
14 - 1 = 13
<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>
因此,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();
Javascript将页面上的文本解释为字符串。这是因为页面上的文本通常是这样的。例如:
14 + 1 = 141
14 - 1 = 13
<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>
因此,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();
您可以使用:
var oldnum=+$.trim(num.html())
-只是一个数字运算符(不能减去字符串),因此javascript强制oldnum为数字可以同时处理数字和字符串,因此javascript将第二个操作数(1)强制为字符串,因为该操作数与oldnum匹配。var oldnum=num.html()//喜欢的数量是一个字符串,您必须将oldnum
转换为整数parseInt(oldnum,10)
应该完成您可以使用的技巧:var oldnum=+$.trim(num.html())
-只是一个数字运算符(不能减去字符串),因此javascript强制oldnum为数字可以同时处理数字和字符串,因此javascript将第二个操作数(1)强制为字符串,因为该操作数与oldnum匹配。var oldnum=num.html()//喜欢的数量是一个字符串,您必须将oldnum
转换为整数parseInt(oldnum,10)
应该做一个(悲伤的)事实,是的:在javascript中,字符串连接和加法运算符都用“+”表示。在许多其他语言中都不是这样,比如php、lua..,您可以将oldnum解析为如下数字:oldnum=parseInt(num.html(),10)代码>为什么在parseInt中使用“10”?它代表什么?那是基数。w3学派:如果省略了基数参数,JavaScript会假设如下:如果字符串以“0x”开头,则基数为16(十六进制);如果字符串以“0”开头,则基数为8(八进制)。此功能不推荐使用。如果字符串以任何其他值开头,则基数为10(十进制),具体取决于您需要什么。若您尝试使用Number('10px'),Number将显示NaN,但parseInt将返回10。我想说数字更严格……作为一个(可悲的)事实,是的:在javascript中,字符串连接和加法运算符都用“+”表示。在许多其他语言中都不是这样,比如php、lua..,您可以将oldnum解析为如下数字:oldnum=parseInt(num.html(),10)代码>为什么在parseInt中使用“10”?它代表什么?那是基数。w3学派:如果省略了基数参数,JavaScript会假设如下:如果字符串以“0x”开头,则基数为16(十六进制);如果字符串以“0”开头,则基数为8(八进制)。此功能不推荐使用。如果字符串以任何其他值开头,则基数为10(十进制),具体取决于您需要什么。若您尝试使用Number('10px'),Number将显示NaN,但parseInt将返回10。我想说数字更严格…你说+oldnum是什么意思?num.html(+oldnum)?您可以使用num.html((+oldnum)+1)来代替num.html(Number(oldnum)+1)
。使用+oldnum是什么意思?num.html(+oldnum)?您可以使用num.html((+oldnum)+1)来代替num.html(Number(oldnum)+1)
。