добавить в url и обновить страницу
Я хочу написать фрагмент javascript, который добавит параметр к текущему url - адресу, а затем обновит страницу-как я могу это сделать?
5 ответов:
это должно работать (не проверял!)
var url = window.location.href; if (url.indexOf('?') > -1){ url += '¶m=1' }else{ url += '?param=1' } window.location.href = url;
короче принятого ответа, делая то же самое, но сохраняя его простым:
window.location.search += '¶m=42';
нам не нужно изменять весь url, только строку запроса, известную как атрибут поиска местоположения.
когда вы присваиваете значение атрибуту поиска, вопросительный знак автоматически вставляется браузером и страница перезагружается.
большинство ответов здесь предполагают, что следует добавить параметр(ы) к URL-адресу, что-то вроде следующего фрагмента или аналогичного варианта:
location.href = location.href + "¶meter=" + value;
это будет работать достаточно хорошо для большинства случаев.
это не правильный способ добавить параметр в URL-адрес, на мой взгляд.
потому что предлагаемый подход не проверяет, если параметр уже установлен в URL, если он не осторожен может закончиться очень длинным URL-адресом с одним и тем же параметром, повторенным несколько раз. т. е.:
https://stackoverflow.com/?¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1¶m=1
в этот момент начинаются проблемы. Предлагаемый подход может и будет создавать очень длинный URL-адрес после обновления нескольких страниц, что делает URL-адрес недействительным. Перейдите по этой ссылке для получения дополнительной информации о long URL какова максимальная длина URL-адреса в разных браузерах?
Это мой предложенный подход:
function URL_add_parameter(url, param, value){ var hash = {}; var parser = document.createElement('a'); parser.href = url; var parameters = parser.search.split(/\?|&/); for(var i=0; i < parameters.length; i++) { if(!parameters[i]) continue; var ary = parameters[i].split('='); hash[ary[0]] = ary[1]; } hash[param] = value; var list = []; Object.keys(hash).forEach(function (key) { list.push(key + '=' + hash[key]); }); parser.search = '?' + list.join('&'); return parser.href; }
С помощью этой функции просто нужно будет сделать следующее:
location.href = URL_add_parameter(location.href, 'param', 'value');
function gotoItem( item ){ var url = window.location.href; var separator = (url.indexOf('?') > -1) ? "&" : "?"; var qs = "item=" + encodeURIComponent(item); window.location.href = url + separator + qs; }
больше совместимости версии
function gotoItem( item ){ var url = window.location.href; url += (url.indexOf('?') > -1)?"&":"?" + "item=" + encodeURIComponent(item); window.location.href = url; }