додати до URL-адреси та оновити сторінку


Відповіді:


162

це має працювати (не перевірено!)

var url = window.location.href;    
if (url.indexOf('?') > -1){
   url += '&param=1'
}else{
   url += '?param=1'
}
window.location.href = url;

1
str.search (regex) швидше, ніж srt.indexOf (str2)
xavierm02

1
І вам слід навести ull приклад із ім'ям змінної та параметром змінної з encodeURIComponent ().
xavierm02

І після> -1, ви повинні використовувати! == -1
xavierm02

8
далі слід відповісти на це, як можна додати певну логіку, що якщо параметр вже існує в URL-адресі, я оновлюю його значення, а не додаючи новий параметр?
аматорський

1
це зніме якір (хеш-значення) з URL, якщо він існував, @amateur ви можете знайти функцію, яка робить це тут: stackoverflow.com/questions/486896/…
Doug Molineux,

143

Коротше, ніж прийнята відповідь, те саме, але просто:

window.location.search += '&param=42';

Нам не потрібно змінювати всю URL-адресу, лише рядок запиту, відомий як атрибут пошуку місцезнаходження.

Коли ви присвоюєте значення атрибуту пошуку, веб-переглядач автоматично вставляє запитальний знак і сторінка перезавантажується.


11
У випадку, коли ви знаєте, що це буде єдиний параметр, ви також можете встановити пошук, а не додавати до нього:window.location.search = '?param=42';
Dave DuPlantis

1
Чудова робота!! Правильний, найпростіший та оптимізований спосіб; повинна була бути прийнятою відповіддю.
Рохіт

Що робити, якщо ваша URL-адреса: www.mysite.com ... то чи не буде вона URL-адресою: www.mysite.com & param = 42, якій знадобиться "?" символ, оскільки єдиний параметр у URL-адресі. Мені подобається відповідь @Shlomi Komemi, оскільки вона охоплює ці 2 основні сценарії.
більшийКрін

1
@greaterKing браузер додає знак запитання, додаючи параметри до атрибуту пошуку місцезнаходження. Спробуйте це на консолі браузера.
Бо Фредеріксен

1
Мій поганий @BoFrederiksen, ти справді правильний ... серрій про це. "+ =" грубої ... пропустив це. +1 від мене.
більшийКрін

70

Більшість відповідей тут припускають, що слід додати параметр (и) до URL-адреси, наприклад, такий фрагмент або подібний варіант:

location.href = location.href + "&parameter=" + value;

Це буде спрацювати досить добре для більшості випадків.

Однак

На мою думку, це не правильний спосіб додавання параметра до URL-адреси.

Оскільки запропонований підхід не перевіряє, чи параметр уже встановлено в URL-адресі, якщо це не обережно, може виявитися дуже довгою URL-адресою з тим самим параметром, повтореним кілька разів. тобто:

https://stackoverflow.com/?&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1

в цей момент тут починаються проблеми. Запропонований підхід може створити дуже довгу URL-адресу після оновлення декількох сторінок, зробивши таким чином URL-адресу недійсним. Перейдіть за цим посиланням для отримання додаткової інформації про довгу 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');

1
Чому б не просто скористатися:if(window.location.search.indexOf('&param=') == -1) {window.location.search += '&param=1';}
538ROMEO

@ SébastienGarcia-Roméo Так, це цікавий підхід, і він дійсно дійсний, однак є дві причини, чому функція запрограмована таким чином. 1. Для усунення існуючих повторюваних параметрів. 2. Перезаписати значення існуючого параметра. З цієї точки зору, тепер використання indexOfможе ввести непотрібну складність коду.
yeyo


2
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;
}

1

Перевірте наведений нижче код:

/*Get current URL*/    
var _url = location.href; 
/*Check if the url already contains ?, if yes append the parameter, else add the parameter*/
_url = ( _url.indexOf('?') !== -1 ) ? _url+'&param='+value : _url+'?param='+value;
/*reload the page */
window.location.href = _url;

1

Одне невелике виправлення помилок для продуманої відповіді @ yeyo вище.

Змінити:

var parameters = parser.search.split(/\?|&/);

До:

var parameters = parser.search.split(/\?|&amp;/);


Будь ласка, опублікуйте такі виправлення в коментарі або запропонуйте та відредагуйте. Вони не гарантують окремої відповіді.
JJ для прозорості та Моніки


0

Також:

window.location.href += (window.location.href.indexOf('?') > -1 ? '&' : '?') + 'param=1'

Лише один лайнер Shlomi відповідає на закладках

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.