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
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");
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");
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)
}
Ten ostatni wiersz powinien być 'url.replace (re, param + '=' + wartość + '$ 2')', prawda? W przeciwnym razie stracisz znak ampersand delimiter. – Ricky
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. –
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