Если у меня есть ссылка, которая изменяется с помощью функции history.pushState({}, "", link);
, где мой link
, например, page.php?value=1&value2=2
, есть ли способ просто изменить value2
с помощью функции pushState()
вместо изменения всей ссылки?
history.pushState() изменить значения запроса
Ответы (3)
Если вы пытаетесь изменить URL-адрес без добавления дополнительной записи в объект истории, вы можете попробовать replaceState
.
history.replaceState({value: 1, value2: X}, "title", "page.php");
person
devstruck
schedule
02.05.2012
Это не похоже на ответ. Передача объекта в качестве первого аргумента
replaceState
не повлияет на значения запроса в URL-адресе. Только последний аргумент: В этом примере он полностью удалит запрос.
- person Trevor Burnham; 16.01.2014
OP хотел обновить (а не создать новое) значение в текущем состоянии истории. Хотя вы не можете использовать pushState для изменения объекта состояния, это цель replaceState.
- person devstruck; 05.10.2015
Нет, поскольку строка запроса является частью URL-адреса. Если вам действительно не нужно передавать эти значения для целей сервера, вы можете включить их в сам объект состояния истории, а затем вы можете изменить только объект состояния с помощью pushState()
. Например:
history.pushState({value: 1, value2: 2}, "Title", 'page.php');
history.pushState({value: 1, value2: 'new value'}, "Title");
person
Chris Pratt
schedule
02.05.2012
Вы можете использовать эту полезную функцию для изменения значения параметра строки запроса:
function updateParam(url, param, value)
{
var re = new RegExp(param+"(.+?)(&|$)","g");
return url.replace(re, param+'='+value)
}
person
ChrisThompson
schedule
02.05.2012
Последняя строка должна быть
url.replace(re, param+'='+value+'$2')
, верно? В противном случае вы потеряете разделитель амперсанда.
- person ; 06.08.2014