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?

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.


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);

27

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

var newValue = parseInt(currentValue) + 1

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);

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.


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


1

para incrementar em um, você pode fazer algo como

  var newValue = currentValue ++;

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.


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.


0

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

var newValue = +currentValue + 1;

-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);

Como isso difere da resposta postada acima (que foi postada há cerca de 10 anos)?
Código Maniac
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.