2012-05-02 5 views
8

Wenn ich einen Link haben, die history.pushState({}, "", link); mit der Funktion geändert wird, wo mein link zum Beispiel ist page.php?value=1&value2=2 Gibt es eine Möglichkeit, nur die value2 mit pushState() Funktion zu ändern, anstatt den ganzen Link zu ändern?history.pushState() ändern Abfragewerte

Antwort

5

Wenn das, was Sie versuchen, die URL zu ändern, ohne das Hinzufügen einer zusätzlichen Eintrag der zu tun ist, History-Objekt, könnten Sie versuchen replaceState.

history.replaceState({value: 1, value2: X}, "title", "page.php"); 
+9

Das scheint keine Antwort zu sein. Das Übergeben eines Objekts als erstes Argument an 'replaceState' wirkt sich nicht auf die Abfragewerte in der URL aus. Nur das letzte Argument wird: In diesem Beispiel wird die Abfrage vollständig entfernt. –

+1

Das OP wollte einen Wert im aktuellen Verlaufszustand aktualisieren (anstatt einen neuen zu erstellen). Obwohl Sie mit pushState kein Zustandsobjekt ändern können, ist dies der Zweck von replaceState. – devstruck

2

Nein, weil die Abfragezeichenfolge Teil der URL ist. Wenn Sie diese Werte nicht wirklich für die Zwecke des Servers übergeben müssen, können Sie sie in das Statusobjekt des Verlaufs selbst aufnehmen, und dann können Sie nur das Statusobjekt mit pushState() ändern. Zum Beispiel:

history.pushState({value: 1, value2: 2}, "Title", 'page.php'); 
history.pushState({value: 1, value2: 'new value'}, "Title"); 
3

können Sie diese nützliche Funktion verwenden, um eine Abfrage-String-Parameter-Wert zu ändern:

function updateParam(url, param, value) 
{ 
    var re = new RegExp(param+"(.+?)(&|$)","g"); 

    return url.replace(re, param+'='+value) 
} 
+3

Die letzte Zeile sollte 'url.replace (re, param + '=' + Wert + '$ 2')', oder? Andernfalls verlieren Sie das Ampersand-Trennzeichen. – Ricky

Verwandte Themen