2012-07-02 12 views
13

tengo la siguiente variable:Cómo incrementar una cadena numérica de 1 con Javascript/jQuery

pageID = 7 

me gustaría incrementar este número en un enlace:

$('#arrowRight').attr('href', 'page.html?='+pageID); 

Así que este 7 salidas, me gustaría añadir el enlace a decir 8. Pero si añado 1:.

$ ('# arrowRight') attr ('href', '? pagina.html =' + ID de página + 1);

me sale el siguiente resultado: 1.html = 71 en lugar de 8.

¿Cómo puedo incrementar este número a pageID + 1??

+2

¡Casi un ejemplo perfecto de que "cómo agregar dos números con jQuery" ya no es una broma! –

Respuesta

26

Prueba esto:

parseInt(pageID, 10) + 1 

Accordint a su código:

$('#arrowRight').attr('href', 'page.html?='+ (parseInt(pageID, 10) + 1)); 
+0

Sí, pero en contexto: ''page.html?' + (parseInt (pageID, 10) + 1) '- la subexpresión tiene que estar entre paréntesis. – Pointy

+0

Lo sé, edité mi respuesta ya – antyrat

+0

parseInt no es necesario si pageID ya es un número entero, que está en la pregunta de OP. No tiene que llamar a 'parseInt' en un número solo para incrementarlo – jackwanders

1

Es necesario que haya un número entero, no una cadena. Prueba esto:

pageID = parseInt(pageID)+1; 

entonces usted puede hacer

$('#arrowRight').attr('href', 'page.html?='+pageID); 
+0

Asegúrese de pasar el segundo parámetro a 'parseInt' (10) para que valores como" 08 "y" 09 "funcionen correctamente. – Pointy

+0

Muy cierto, por lo general no funcionan con valores que comienzan con '0' por lo que por costumbre lo dejé fuera. ¡Buena atrapada! – ninja

0

Simplemente, $('#arrowRight').attr('href', 'page.html?='+(pageID+1));

Los paréntesis hace que el cálculo realizado antes de la concatenación de cadenas.

+0

Para los detractores: ¿por qué? – Shikiryu

0

Simplemente cambie su orden de operaciones al envolver su adición entre paréntesis; Si pageID ya es un número, parseInt() no es necesario:

$('#arrowRight').attr('href', 'page.html?='+(pageID+1)); 
+0

¿A alguien le importaría explicar estos votos a la baja? Aquí hay una demostración que muestra perfectamente que este método funciona: http://jsfiddle.net/jackwanders/KX9Q8/ – jackwanders

0

Mientras su pageID es numérico, esto debería ser suficiente:

$('#arrowRight').attr('href', 'page.html?='+(pageID+1)); 

El problema que estaban viendo es que JavaScript normalmente se ejecuta en orden de izquierda a derecha, por lo que la cadena de la izquierda hace que el + se vea como un concatenador, por lo que agrega el 7 a la cadena y luego agrega 1 a la cadena incluyendo 7.

4

+ pasa a ser un operador válido para bo th cadenas y números que da resultados diferentes cuando ambos argumentos son numéricos y cuando al menos uno no lo es. Una de las soluciones posibles es usar un operador que solo tenga un contexto numérico pero que tenga el mismo resultado matemático, como -. some_var - -1 siempre será lo mismo que agregar 1 a some_var valor numérico, sin importar si es cadena o no.

$('#arrowRight').attr('href', 'page.html?='+ (pageID - -1)); 
-1

let pageId = '7' 
 
pageId++ 
 
console.log(pageId)

Hoy en día, sólo tiene que pageID ++.

1

Todas estas soluciones asumen que su número al que desea agregar 1 está dentro de la precisión de la máquina para un número entero. Entonces, si tiene un número lo suficientemente grande dentro de esa cadena, cuando agrega 1 no cambiará el número.

Por ejemplo:

parseInt('800000000000000000', 10) + 1 = 800000000000000000 

Así que escribí una solución rápida al problema

function addOne(s) { 
    let newNumber = ''; 
    let continueAdding = true; 
    for (let i = s.length - 1; i>= 0; i--) { 
     if (continueAdding) { 
      let num = parseInt(s[i], 10) + 1; 
      if (num < 10) { 
       newNumber += num; 
       continueAdding = false; 
      } else { 
       newNumber += '0'; 
      } 
     } else { 
      newNumber +=s[i]; 
     } 
    } 
    return newNumber.split("").reverse().join(""); 
} 

Ahora, utilizando el mismo ejemplo anterior

addOne('800000000000000000') + 1 = '800000000000000001' 

Tenga en cuenta que debe mantenerse lo una cuerda o perderá ese 1 al final.

Cuestiones relacionadas