2012-07-02 11 views
13

ich eine numerische Zeichenfolge zu erhöhen, haben die folgende Variable:Wie durch ein mit Javascript/jQuery

pageID = 7 

Ich möchte diese Zahl auf einen Link erhöhen:

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

diese So outputs 7, möchte ich den Link zu sagen, sagen 8. Aber wenn ich hinzufügen, +1:

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

bekomme ich folgende Ausgabe: 1.html = 71 statt 8

Wie kann ich diese Zahl erhöhen pageId + 1 werden?

+2

Fast ein perfektes Beispiel dafür, "wie man zwei Zahlen mit jQuery hinzufügen" ist kein Witz mehr! –

Antwort

26

Try this:

parseInt(pageID, 10) + 1 

accordint, um Ihren Code:

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

Ja, aber im Kontext: ''page.html?' + (parseInt (pageID, 10) + 1) '- Der Teilausdruck muss in Klammern gesetzt werden. – Pointy

+0

Ich weiß, bearbeitet meine Antwort bereits – antyrat

+0

parseInt ist nicht erforderlich, wenn pageID bereits eine ganze Zahl ist, die es in der Frage OP ist. Sie müssen 'parseInt' nicht auf einer Zahl aufrufen, nur um sie zu inkrementieren. – jackwanders

1

Es muss eine ganze Zahl sein, kein String. Versuchen Sie folgendes:

pageID = parseInt(pageID)+1; 

Dann können Sie einfach

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

Stellen Sie sicher, dass Sie den zweiten Parameter an 'parseInt' (10) übergeben, damit Werte wie "08" und "09" ordnungsgemäß funktionieren. – Pointy

+0

Sehr wahr, normalerweise nicht mit Werten arbeiten, die mit "0" beginnen, also aus Gewohnheit habe ich es ausgelassen. Schöner Fang! – ninja

0

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

Die Klammern die Berechnung zunächst vor String-Verkettung getan macht.

+0

Um Downvoters: warum? – Shikiryu

0

Ändern Sie einfach die Reihenfolge der Vorgänge, indem Sie den Zusatz in Klammern einschließen; wenn pageID bereits eine Zahl, parseInt() ist nicht erforderlich:

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

Würde es jemanden interessieren, diese downvotes zu erklären? Hier ist eine Demo, die sehr gut zeigt, dass diese Methode funktioniert: http://jsfiddle.net/jackwanders/KX9Q8/ – jackwanders

0

Solange Ihr pageID numerisch ist, sollte dies ausreichend sein:

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

Das Problem, das Sie sahen, dass JavaScript wird normalerweise in der Reihenfolge von links nach rechts ausgeführt, sodass die Zeichenfolge auf der linken Seite dazu führt, dass + als Verkettung angezeigt wird. Daher wird die Zeichenfolge der Zeichenfolge hinzugefügt und der Zeichenfolge einschließlich 7 wird 1 hinzugefügt.

4

+ ist zufällig ein gültiger Operator für bo th Zeichenfolgen und Zahlen, die unterschiedliche Ergebnisse ergeben, wenn beide Argumente numerisch sind und wenn mindestens eins nicht ist. Eine der möglichen Problemumgehungen besteht darin, einen Operator zu verwenden, der nur einen numerischen Kontext hat, aber das gleiche mathematische Ergebnis liefert, z. B. . some_var - -1 ist immer das gleiche wie das Hinzufügen von 1 zu some_var numerischen Wert, egal ob es String oder nicht ist.

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

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

Heute brauchen Sie nur ++ pageId.

1

Alle diese Lösungen gehen davon aus, dass Ihre Nummer, die Sie 1 hinzufügen möchten, innerhalb der Maschinengenauigkeit für eine Ganzzahl liegt. Wenn Sie also innerhalb dieser Zeichenfolge eine ausreichend große Zahl haben, wenn Sie 1 hinzufügen, wird die Zahl nicht geändert.

Beispiel:

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

Also schrieb ich eine schnelle Lösung für das Problem

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(""); 
} 

nun das gleiche Beispiel unter Verwendung der oben

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

Beachten Sie, dass es als bleiben muss eine Zeichenfolge oder du wirst diese 1 am Ende verlieren.

Verwandte Themen