2012-05-02 18 views
8

Jeśli mam linku, który jest zmieniany z funkcją history.pushState({}, "", link); gdzie mój link jest na przykład page.php?value=1&value2=2 Czy istnieje sposób, aby zamiast po prostu zmienić value2 z pushState() funkcję zmiany całego łącza?history.pushState() zapytanie zmiana wartości

Odpowiedz

5

Jeśli próbujesz zrobić, to zmienić adres URL bez dodawania dodatkowego wpisu do obiekt historii, możesz spróbować replaceState.

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

To nie wydaje się być odpowiedzią. Przekazanie obiektu jako pierwszego argumentu 'replaceState' nie wpłynie na wartości zapytania w adresie URL. Tylko ostatni argument: W tym przykładzie całkowicie usunie zapytanie. –

+1

Program operacyjny chciał zaktualizować (a nie utworzyć nową) wartość w bieżącym stanie historii. Chociaż nie można użyć parametru pushState do zmodyfikowania obiektu stanu, jest to celem replaceState. – devstruck

2

Nie, ponieważ ciąg zapytania jest częścią adresu URL. Jeśli naprawdę nie musisz przekazywać tych wartości do celów serwera, możesz uwzględnić je w samym obiekcie stanu historii, a następnie możesz zmienić tylko obiekt stanu za pomocą pushState(). Na przykład:

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

Można użyć tej użytecznej funkcji, aby zmienić wartość parametru ciąg kwerendy:

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

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

Ten ostatni wiersz powinien być 'url.replace (re, param + '=' + wartość + '$ 2')', prawda? W przeciwnym razie stracisz znak ampersand delimiter. – Ricky