Comment ajouter une valeur entière avec javascript (jquery) à une valeur qui renvoie une chaîne?


91

J'ai un simple bloc HTML comme:

<span id="replies">8</span>

En utilisant jquery, j'essaye d'ajouter un 1 à la valeur (8).

var currentValue = $("#replies").text();
var newValue = currentValue + 1;
$("replies").text(newValue);

Ce qui se passe, c'est que ça ressemble à:

81

puis

811

pas 9, ce qui serait la bonne réponse. Qu'est-ce que je fais mal?

Réponses:


186

parseInt () le forcera à être de type entier, ou sera NaN (pas un nombre) s'il ne peut pas effectuer la conversion.

var currentValue = parseInt($("#replies").text(),10);

Le deuxième paramètre (base) garantit qu'il est analysé comme un nombre décimal.


10
Attention à parseInt (), il reconnaît "010" comme 9 (les valeurs commençant par un zéro sont analysées en octal).
MightyE

3
Bleh, "010" analyse comme 8 (et non 8)
MightyE

7
@Jacob Relkin: Comme c'était utile, je lui ai juste donné un autre +1. Si vous connaissez une meilleure réponse, c'est dommage que vous ne l'ayez pas partagée.
ANeves pense que SE est diabolique le

1
Il le fait, à moins qu'il ne détecte un zéro non significatif, alors il devient octal. Un simple problème lors de l'acceptation des entrées utilisateur.
Diodeus - James MacFarlane

1
Cela fonctionne bien tant que vous spécifiez la base en utilisant le deuxième paramètre: parseInt("010", 10)renvoie dix.
jahroy

29

Parse int est l'outil que vous devez utiliser ici, mais comme tout outil, il doit être utilisé correctement. Lorsque vous utilisez parseInt, vous devez toujours utiliser le paramètre radix pour vous assurer que la base correcte est utilisée

var currentValue = parseInt($("#replies").text(),10);

27

L'entier est converti en une chaîne plutôt que l'inverse. Tu veux:

var newValue = parseInt(currentValue) + 1

12

parseInt n'a pas fonctionné pour moi dans IE. J'ai donc simplement utilisé + sur la variable que vous voulez en tant qu'entier.

var currentValue = $("#replies").text();
var newValue = +currentValue + 1;
$("replies").text(newValue);

4

En ce qui concerne la mauvaise interprétation octale de .js - je viens d'utiliser ceci ...

parseInt(parseFloat(nv))

et après avoir testé avec des zéros non significatifs, revenait à chaque fois avec la représentation correcte.

J'espère que cela t'aides.


2

Votre code devrait aimer ceci:

<span id="replies">8</span>

var currentValue = $("#replies").text();
var newValue = parseInt(parseFloat(currentValue)) + 1;
$("replies").text(newValue);

Hacks N Tricks


1

pour incrémenter de un, vous pouvez faire quelque chose comme

  var newValue = currentValue ++;

8
Sûrement ++ currentValue?
Marcin

1
var month = new Date().getMonth();
var newmon = month + 1;
$('#month').html((newmon < 10 ? '0' : '') + newmon );

J'ai simplement résolu votre problème mensuel, le tableau getMonth commence de 0 à 11.


1

Vous pouvez multiplier la variable par 1 pour forcer JavaScript à convertir la variable en un nombre pour vous, puis l'ajouter à votre autre valeur. Cela fonctionne car la multiplication n'est pas surchargée comme l'addition. Certains peuvent dire que c'est moins clair que parseInt, mais c'est une façon de le faire et cela n'a pas encore été mentionné.


0

Ajoutez simplement un signe plus avant la valeur du texte

var newValue = +currentValue + 1;

-1

Vous pouvez utiliser la méthode parseInt () pour convertir une chaîne en entier en javascript

Tu viens de changer le code comme ça

$("replies").text(parseInt($("replies").text(),10) + 1);

En quoi est-ce différent de la réponse publiée ci-dessus (publiée il y a environ 10 ans)?
Code Maniac
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.