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?

rball
la source

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.

Diodeus - James MacFarlane
la source
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);
Jon P
la source
27

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

var newValue = parseInt(currentValue) + 1
Mandrin
la source
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);
Gareth Nel
la source
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.

Bill Ortell
la source
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

Rajeev
la source
1

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

  var newValue = currentValue ++;
Alex
la source
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.

Adeel Ishfaq
la source
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é.

Ryan
la source
0

Ajoutez simplement un signe plus avant la valeur du texte

var newValue = +currentValue + 1;
Agorreca
la source
-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);
Codemaker
la source
En quoi est-ce différent de la réponse publiée ci-dessus (publiée il y a environ 10 ans)?
Code Maniac