history.pushState() изменить значения запроса

Если у меня есть ссылка, которая изменяется с помощью функции history.pushState({}, "", link);, где мой link, например, page.php?value=1&value2=2, есть ли способ просто изменить value2 с помощью функции pushState() вместо изменения всей ссылки?


person Grigor    schedule 02.05.2012    source источник


Ответы (3)


Если вы пытаетесь изменить URL-адрес без добавления дополнительной записи в объект истории, вы можете попробовать replaceState.

history.replaceState({value: 1, value2: X}, "title", "page.php");
person devstruck    schedule 02.05.2012
comment
Это не похоже на ответ. Передача объекта в качестве первого аргумента replaceState не повлияет на значения запроса в URL-адресе. Только последний аргумент: В этом примере он полностью удалит запрос. - person Trevor Burnham; 16.01.2014
comment
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
comment
Последняя строка должна быть url.replace(re, param+'='+value+'$2'), верно? В противном случае вы потеряете разделитель амперсанда. - person ; 06.08.2014