¿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?

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.


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

27

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

var newValue = parseInt(currentValue) + 1

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

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.


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


1

para incrementar en uno puedes hacer algo como

  var newValue = currentValue ++;

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.


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.


0

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

var newValue = +currentValue + 1;

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

¿En qué se diferencia de la respuesta publicada anteriormente (que se publicó hace unos 10 años)?
Code Maniac
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.