Como adiciono um valor inteiro com javascript (jquery) a um valor que está retornando uma string?

91

Eu tenho um bloco HTML simples como:

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

Usando jquery estou tentando adicionar um 1 ao valor (8).

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

O que está acontecendo é que parece:

81

então

811

não 9, que seria a resposta correta. O que estou fazendo de errado?

rball
fonte

Respostas:

186

parseInt () irá forçá-lo a ser do tipo inteiro, ou será NaN (não um número) se não puder realizar a conversão.

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

O segundo parâmetro (raiz) garante que ele seja analisado como um número decimal.

Diodeus - James MacFarlane
fonte
10
Tenha cuidado com parseInt (), ele reconhece "010" como 9 (os valores que começam com um zero são analisados ​​como octal).
MightyE
3
Bleh, "010" analisa como 8 (não 8)
MightyE
7
@Jacob Relkin: Como isso foi útil, acabei de lhe dar outro +1. Se você conhece uma resposta melhor, é uma pena que não a compartilhou.
ANeves
1
Sim, a menos que detecte um zero à esquerda, então se torna octal. Uma falha simples ao aceitar a entrada do usuário.
Diodeus - James MacFarlane
1
Ele funciona bem, desde que você especifique a raiz usando o segundo parâmetro: parseInt("010", 10)retorna dez.
jahroy
29

Parse int é a ferramenta que você deve usar aqui, mas como qualquer ferramenta, deve ser usada corretamente. Ao usar parseInt, você deve sempre usar o parâmetro radix para garantir que a base correta seja usada

var currentValue = parseInt($("#replies").text(),10);
Jon P
fonte
27

O inteiro está sendo convertido em uma string em vez de vice-versa. Você quer:

var newValue = parseInt(currentValue) + 1
Mandril
fonte
12

parseInt não funcionou para mim no IE. Então, simplesmente usei + na variável que você deseja como um inteiro.

var currentValue = $("#replies").text();
var newValue = +currentValue + 1;
$("replies").text(newValue);
Gareth Nel
fonte
4

Em relação à má interpretação octal de .js - acabei de usar isso ...

parseInt(parseFloat(nv))

e depois de testar com zeros à esquerda, voltou todas as vezes com a representação correta.

espero que isto ajude.

Bill Ortell
fonte
2

Seu código deve ser assim:

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

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

Hacks N Tricks

Rajeev
fonte
1

para incrementar em um, você pode fazer algo como

  var newValue = currentValue ++;
alex
fonte
8
Certamente ++ currentValue?
Marcin
1
var month = new Date().getMonth();
var newmon = month + 1;
$('#month').html((newmon < 10 ? '0' : '') + newmon );

Eu simplesmente resolvi seu problema de mês, a matriz getMonth começa de 0 a 11.

Adeel Ishfaq
fonte
1

Você pode multiplicar a variável por 1 para forçar o JavaScript a converter a variável em um número para você e então adicioná-la ao seu outro valor. Isso funciona porque a multiplicação não é sobrecarregada como a adição. Alguns podem dizer que isso é menos claro do que parseInt, mas é uma maneira de fazer isso e ainda não foi mencionado.

Ryan
fonte
0

Simplesmente, adicione um sinal de mais antes do valor do texto

var newValue = +currentValue + 1;
Agorreca
fonte
-1

Você pode usar o método parseInt () para converter string em inteiro em javascript

Você acabou de alterar o código assim

$("replies").text(parseInt($("replies").text(),10) + 1);
Codemaker
fonte
Como isso difere da resposta postada acima (que foi postada há cerca de 10 anos)?
Código Maniac