2012-07-02 15 views
13

ho la seguente variabile:Come incrementare una stringa numerica di +1 JavaScript/jQuery

pageID = 7 

mi piacerebbe incrementare questo numero su un link:

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

Quindi questo uscite 7, vorrei aggiungere il link per dire 8. Ma se aggiungo +1:

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

ottengo il seguente output: 1.html = 71 invece di 8.

Come posso incrementare questo numero da pageId + 1?

+2

Quasi un esempio perfetto di "come aggiungere due numeri con jQuery" non è più uno scherzo! –

risposta

26

Prova questo:

parseInt(pageID, 10) + 1 

Accordint al codice:

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

Sì ma nel contesto: ''page.html?' + (parseInt (pageID, 10) + 1) '- la sottoespressione deve essere tra parentesi. – Pointy

+0

Lo so, ha modificato la mia risposta già – antyrat

+0

parseInt non è necessario se pageID è già un numero intero, che è nella domanda dell'OP. Non devi chiamare 'parseInt' su un numero solo per incrementarlo – jackwanders

1

ha bisogno di essere un numero intero, non una stringa. Prova questo:

pageID = parseInt(pageID)+1; 

allora si può fare

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

Assicurati di passare il secondo parametro a 'parseInt' (10) in modo che valori come" 08 "e" 09 "funzionino correttamente. – Pointy

+0

Molto vero, di solito non funziona con valori che iniziano con '0', quindi per abitudine l'ho lasciato fuori. Bella presa! – ninja

0

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

Le parentesi rende il calcolo fatto prima di concatenazione di stringhe.

+0

Per i downvoters: perché? – Shikiryu

0

Basta modificare l'ordine delle operazioni avvolgendo l'aggiunta tra parentesi; se pageID è già un numero, parseInt() non è necessaria:

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

Qualcuno dovrebbe preoccuparsi di spiegare questi downvotes? Ecco una demo che mostra perfettamente che questo metodo funziona: http://jsfiddle.net/jackwanders/KX9Q8/ – jackwanders

0

Finché il pageID è numerico, questo dovrebbe essere sufficiente:

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

Il problema che stavano vedendo è che JavaScript normalmente si esegue nell'ordine da sinistra a destra, quindi la stringa a sinistra fa sì che + sia visto come un concatenatore, quindi aggiunge il 7 alla stringa e quindi aggiunge 1 alla stringa 7. 7.

4

+ capita di essere un valido operatore per bo th stringhe e numeri che danno risultati diversi quando entrambi gli argomenti sono numerici e quando almeno uno non lo è. Uno di possibili soluzioni alternative consiste nell'utilizzare l'operatore che dispone solo di un contesto numerico, ma fornisce lo stesso risultato matematico, ad esempio -. some_var - -1 sarà sempre uguale all'aggiunta del valore numerico da 1 a some_var, indipendentemente dal fatto che sia stringa o meno.

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

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

Al giorno d'oggi, è solo bisogno di pageId ++.

1

Tutte queste soluzioni presuppongono che il numero a cui si desidera aggiungere 1 sia all'interno della precisione della macchina per un numero intero. Quindi se hai un numero abbastanza grande all'interno di quella stringa quando ne aggiungi 1 non cambierà il numero.

Per esempio:

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

così ho scritto una rapida soluzione 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(""); 
} 

Ora, utilizzando lo stesso esempio di cui sopra

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

Nota che deve rimanere come una stringa o la perderai 1 alla fine.

Problemi correlati