¿Cómo agrego un valor entero con javascript (jquery) a un valor que devuelve una cadena?

91

Tengo un bloque html simple como:

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

Usando jquery estoy tratando de agregar un 1 al valor (8).

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

Lo que está sucediendo es que parece:

81

luego

811

no 9, que sería la respuesta correcta. ¿Qué estoy haciendo mal?

rball
fuente

Respuestas:

186

parseInt () lo forzará a ser de tipo entero, o será NaN (no un número) si no puede realizar la conversión.

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

El segundo parámetro (base) asegura que se analiza como un número decimal.

Diodeus - James MacFarlane
fuente
10
Tenga cuidado con parseInt (), reconoce "010" como 9 (los valores que van con un cero se analizan como octal).
MightyE
3
Bleh, "010" analiza como 8 (no 8)
MightyE
7
@Jacob Relkin: Ya que esto fue útil, le di otro +1. Si conoce una respuesta mejor, es una pena que no la haya compartido.
ANeves piensa que SE es malvado
1
Lo hace, a menos que detecte un cero a la izquierda, entonces se convierte en octal. Un simple error al aceptar la entrada del usuario.
Diodeus - James MacFarlane
1
Funciona bien siempre que especifique la base utilizando el segundo parámetro: parseInt("010", 10)devuelve diez.
jahroy
29

Parse int es la herramienta que debe usar aquí, pero como cualquier herramienta, debe usarse correctamente. Al usar parseInt, siempre debe usar el parámetro radix para asegurarse de que se use la base correcta

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

El número entero se convierte en una cadena en lugar de viceversa. Usted quiere:

var newValue = parseInt(currentValue) + 1
Arrojar
fuente
12

parseInt no me funcionó en IE. Así que simplemente usé + en la variable que quieres como un número entero.

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

En lo que respecta a la mala interpretación octal de .js, acabo de usar esto ...

parseInt(parseFloat(nv))

y después de probar con ceros a la izquierda, volvía cada vez con la representación correcta.

espero que esto ayude.

Bill Ortell
fuente
2

Su código debería tener este aspecto:

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

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

Trucos y trucos

rajeev
fuente
1

para incrementar en uno puedes hacer algo como

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

Simplemente solucioné el problema del mes, la matriz getMonth comienza de 0 a 11.

Adeel Ishfaq
fuente
1

Puede multiplicar la variable por 1 para obligar a JavaScript a convertir la variable en un número y luego agregarla a su otro valor. Esto funciona porque la multiplicación no está sobrecargada como la suma. Algunos pueden decir que esto es menos claro que parseInt, pero es una forma de hacerlo y aún no se ha mencionado.

Ryan
fuente
0

Simplemente, agregue un signo más antes del valor del texto

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

Puede usar el método parseInt () para convertir cadenas a números enteros en javascript

Solo cambia el código así

$("replies").text(parseInt($("replies").text(),10) + 1);
Codemaker
fuente
¿En qué se diferencia de la respuesta publicada anteriormente (que se publicó hace unos 10 años)?
Code Maniac