2012-05-02 3 views
8

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

ответ

5

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

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

Это не похоже на ответ. Передача объекта в качестве первого аргумента функции replaceState не влияет на значения запроса в URL-адресе. Только последний аргумент будет: В этом примере он полностью удалит запрос. –

+1

OP хотел обновить (а не создать новое) значение в текущем состоянии истории. Хотя вы не можете использовать pushState для изменения объекта состояния, это цель replaceState. – devstruck

2

Нет, поскольку строка запроса является частью URL-адреса. Если вам действительно не нужно передавать эти значения для целей сервера, вы можете включить их в сам объект состояния истории, а затем вы можете изменить только объект состояния с помощью pushState(). Например:

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

Вы можете использовать эту полезную функцию для изменения значения параметра строки запроса:

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

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

Эта последняя строка должна быть «url.replace (re, param + '=' + value + '$ 2')', правильно? В противном случае вы потеряете разделитель амперсандов. – Ricky

Смежные вопросы