Змінення параметрів URL-адреси


189

Я маю цю URL-адресу:

site.fwx?position=1&archiveid=5000&columns=5&rows=20&sorting=ModifiedTimeAsc

що мені потрібно, щоб я міг змінити значення параграфа "рядки" на щось, що я вказую, давайте скажемо 10. А якщо "рядки" не існують, мені потрібно додати його до кінця URL-адреси та додати значення, яке я вже вказав (10).


2
Легкий, що не-плагін Відповідь: stackoverflow.com/a/10997390/11236
ripper234

11
Я не можу повірити, що це 2013 рік, і немає кращого способу зробити це, як щось вбудоване в основні бібліотеки браузера.
Тайлер Коллер

Дивіться моя відповідь для сучасного рішення: stackoverflow.com/a/19965480/64949
Sindre Sorhus

6
@TylerCollier середина 2015 року зараз і все ще нічого :(
Техас Манохар

3
Схоже, ми потрапляємо туди ... developer.mozilla.org/en-US/docs/Web/API/URLSearchParams/…
chris

Відповіді:


111

Я розширив код Sujoy, щоб скласти функцію.

/**
 * http://stackoverflow.com/a/10997390/11236
 */
function updateURLParameter(url, param, paramVal){
    var newAdditionalURL = "";
    var tempArray = url.split("?");
    var baseURL = tempArray[0];
    var additionalURL = tempArray[1];
    var temp = "";
    if (additionalURL) {
        tempArray = additionalURL.split("&");
        for (var i=0; i<tempArray.length; i++){
            if(tempArray[i].split('=')[0] != param){
                newAdditionalURL += temp + tempArray[i];
                temp = "&";
            }
        }
    }

    var rows_txt = temp + "" + param + "=" + paramVal;
    return baseURL + "?" + newAdditionalURL + rows_txt;
}

Функціональні дзвінки:

var newURL = updateURLParameter(window.location.href, 'locId', 'newLoc');
newURL = updateURLParameter(newURL, 'resId', 'newResId');

window.history.replaceState('', '', updateURLParameter(window.location.href, "param", "value"));

Оновлена ​​версія, яка також піклується про прив’язки до URL-адреси.

function updateURLParameter(url, param, paramVal)
{
    var TheAnchor = null;
    var newAdditionalURL = "";
    var tempArray = url.split("?");
    var baseURL = tempArray[0];
    var additionalURL = tempArray[1];
    var temp = "";

    if (additionalURL) 
    {
        var tmpAnchor = additionalURL.split("#");
        var TheParams = tmpAnchor[0];
            TheAnchor = tmpAnchor[1];
        if(TheAnchor)
            additionalURL = TheParams;

        tempArray = additionalURL.split("&");

        for (var i=0; i<tempArray.length; i++)
        {
            if(tempArray[i].split('=')[0] != param)
            {
                newAdditionalURL += temp + tempArray[i];
                temp = "&";
            }
        }        
    }
    else
    {
        var tmpAnchor = baseURL.split("#");
        var TheParams = tmpAnchor[0];
            TheAnchor  = tmpAnchor[1];

        if(TheParams)
            baseURL = TheParams;
    }

    if(TheAnchor)
        paramVal += "#" + TheAnchor;

    var rows_txt = temp + "" + param + "=" + paramVal;
    return baseURL + "?" + newAdditionalURL + rows_txt;
}

Я не можу зробити так, щоб це спрацювало. Ось мій код: jsfiddle.net/Draven/tTPYL/1 URL буде виглядати так, http://www.domain.com/index.php?action=my_action&view-all=Yesі мені потрібно змінити значення "view-all". Моє запитання, яке було закрито: stackoverflow.com/questions/13025880/…
Draven

Ти впевнений? це працювало для мене легко. Ознайомтесь тут: jsfiddle.net/mw49a
Аділ Малік

1
Використовуйте "var i = 0" замість "i = 0", щоб не створювати / змінювати i як глобальну змінну.
Джонатан Акіно

1
Кілька інших проблем із цією функцією: (1) paramVal не кодується uri. (2) якщо paramVal недійсний, то ви отримуєте foo = null. Це має бути foo = (а ще краще, видалити foo повністю).
Джонатан Акіно

Це значно полегшило моє життя. Дякую, товариш!
boydenhartog

97

Я думаю, ви хочете плагін запиту .

Наприклад:

window.location.search = jQuery.query.set("rows", 10);

Це буде працювати незалежно від поточного стану рядків.


Mofle, це тому, що плагін Query використовує decodeURIComponent, а decodeURIComponent ("% F8") недійсний.
Метью Флашен

2
Дістаньте ці дивні речі зі своєї URL-адреси. Або, іншими словами, "змінити рядок запитів, щоб використовувати лише дійсні символи UTF-8". :) Тільки F8 не є дійсним символом UTF-8.
Matthew Flaschen

Чи є спосіб отримати базовий URL з цього плагіна? Наприклад, якщо моя URL-адреса " youtube.com/watch?v=PZootaxRh3M ", отримайте " youtube.com/watch "
Метт Норріс

3
@Wraith, для цього вам не потрібен плагін. Це просто window.location.pathname.
Меттью Флашен

2
@MattNorris Для цього вам не потрібен плагін, але правильна відповідь: window.location.host + window.location.pathname У вашому випадку це буде "www.youtube.com/watch"
nktssh

68

Відповісти на власне запитання через 4 роки, після того, як багато чого навчився. Тим більше, що ви не повинні використовувати jQuery для всього. Я створив простий модуль, який може розбирати / строфікувати рядок запиту. Це дозволяє легко змінювати рядок запиту.

Ви можете використовувати рядок запитів наступним чином:

// parse the query string into an object
var q = queryString.parse(location.search);
// set the `row` property
q.rows = 10;
// convert the object to a query string
// and overwrite the existing query string
location.search = queryString.stringify(q);

1
Ого, це геніально просте рішення. Дякую!
jetlej

Це працює як чемпіон! Дякую, Сіндре 🏆🏆🏆 (все, що вам потрібно зробити, - це мінімізувати "query-string / index.js" і вставити його внизу вашого js)
Ронні Ройстон,

1
Мати додаткову бібліотеку саме для цього здається трохи зайвою ...
Хрещений батько

jQuery було занадто багато для 1 функції, тож замість цього ви використовували машинопис, травіс та кілька інших незалежних залежностей :)
Justin Meiners

@JustinMeiners Будь ласка, не коментуйте, якщо у вас немає нічого корисного, щоб сприяти розмові. TypeScript не використовується цим проектом. Тревіс - це КІ, а не залежність.
Сіндре Сорхус

64

Швидке маленьке рішення у чистому js, не потрібні додатки:

function replaceQueryParam(param, newval, search) {
    var regex = new RegExp("([?;&])" + param + "[^&;]*[;&]?");
    var query = search.replace(regex, "$1").replace(/&$/, '');

    return (query.length > 2 ? query + "&" : "?") + (newval ? param + "=" + newval : '');
}

Назвіть це так:

 window.location = '/mypage' + replaceQueryParam('rows', 55, window.location.search)

Або, якщо ви хочете залишитися на одній сторінці і замінити кілька парам:

 var str = window.location.search
 str = replaceQueryParam('rows', 55, str)
 str = replaceQueryParam('cols', 'no', str)
 window.location = window.location.pathname + str

редагувати, завдяки Люку: Щоб видалити параметр цілком, передати falseабо nullдля значення: replaceQueryParam('rows', false, params). Оскільки 0 також є хибним , уточнюйте '0'.


2
також щоб видалити використаний параметр з виводу, зробіть це: str = substituQueryParam ('oldparam', false, str) - в основному поставте значення false типу
Luke Wenke

1
має проблему, дублювання мого параметра без поважної причини, перевірити це подібне рішення stackoverflow.com/a/20420424/3160597
azerafati

@Bludream цей код працює у виробництві роками. Я ще не бачив, як це повторював парам. Чи можете ви опублікувати довідку чи іншу більш конструктивну інформацію?
Бронсон

@Bludream Я розумію, що це сценарій, з яким ви пов’язані, додав повторювані параметри. :)
bronson

1
@dVyper правильне, хибне значення повністю видаляє параметр. Використовуйте текст "0" замість цілого числа 0.
Бронсон

62

Бен Alman має хороший JQuery QueryString / URL плагін тут , що дозволяє маніпулювати рядок запиту легко.

Як вимагалось -

Перейдіть на його тестову сторінку тут

У firebug введіть у консоль наступне

jQuery.param.querystring(window.location.href, 'a=3&newValue=100');

Він поверне вам наступний змінений рядок URL-адреси

http://benalman.com/code/test/js-jquery-url-querystring.html?a=3&b=Y&c=Z&newValue=100#n=1&o=2&p=3

Зверніть увагу, що значення запиту для рядка a змінилося з X на 3, і воно додало нове значення.

Тоді ви можете використовувати новий рядок URL, але хочете, наприклад, використовуючи document.location = newUrl або змінити якірне посилання тощо


4
Це не jQuery.param.querystring замість jQuery.queryString?
Петро Пеллер

12
TypeError: jQuery.param.querystring is not a function
TMS

1
Щоб уникнути 'TypeError', він повинен бути: jQuery.queryString (window.location.href, 'a = 3 & newValue = 100')
code-gijoe

2
ви повинні зателефонувати jQuery.param.querystring. Я думаю, вони відновили бібліотеку.
Буде Ву

Жодна з цих функцій вже не існує. Ви хочете оновити window.location.search вручну. Це стає складніше, якщо ви не хочете, щоб сторінка перефарбовувалася, оскільки це призведе до зміни сторінки.
монокром

39

Сучасний підхід до цього полягає у використанні нативного стандартного URLSearchParams на основі стандартних стандартів . Його підтримують усі основні браузери, за винятком IE, де вони доступні для поліфілів

const paramsString = "site.fwx?position=1&archiveid=5000&columns=5&rows=20&sorting=ModifiedTimeAsc"
const searchParams = new URLSearchParams(paramsString);
searchParams.set('rows', 10);
console.log(searchParams.toString()); // return modified string.

1
Було б дуже приємно ... але це не так, як IE взагалі не підтримує цього, а використання поліфілів для такої дрібної речі зовсім не підлягає сумніву.
форсберг

1
це також urlencoding оригінальні paramsString в повному обсязі, так що результат виглядає як site.fwx%3Fposition=1&archiveid=5000&columns=5&rows=10&sorting=ModifiedTimeAscзаплутаний, тому що це не те, що ви побудували б, якби це зробили вручну ...
Ben Wheeler

1
Було б добре побачити приклад того, як ним користуватися. Я маю на увазі, як отримати рядок парам з поточної сторінки та як її встановити після цього
The Godfather

27

Ви можете це зробити і через звичайний JS

var url = document.URL
var newAdditionalURL = "";
var tempArray = url.split("?");
var baseURL = tempArray[0];
var aditionalURL = tempArray[1]; 
var temp = "";
if(aditionalURL)
{
var tempArray = aditionalURL.split("&");
for ( var i in tempArray ){
    if(tempArray[i].indexOf("rows") == -1){
            newAdditionalURL += temp+tempArray[i];
                temp = "&";
            }
        }
}
var rows_txt = temp+"rows=10";
var finalURL = baseURL+"?"+newAdditionalURL+rows_txt;

Приємно! Я взяв це і змінив у функцію. Ви надсилаєте поточну URL-адресу, ім'я параметра, яке ви шукаєте, нове значення та bool, повідомляючи про це, якщо ви хочете додати параметр до рядка запиту, якщо я зараз його не знаходжу. Функція повертає змінену URL-адресу.
Громер

Гормере, ви повинні поділитися цією функцією з іншими :)
Аділ Малік

Дивовижний фрагмент Я теж перетворив це на функцію для власного випадку використання. Дякую, що поділились! +1
халява

19

Це сучасний спосіб зміни параметрів URL:

function setGetParam(key,value) {
  if (history.pushState) {
    var params = new URLSearchParams(window.location.search);
    params.set(key, value);
    var newUrl = window.location.protocol + "//" + window.location.host + window.location.pathname + '?' + params.toString();
    window.history.pushState({path:newUrl},'',newUrl);
  }
}

2
Це рішення в даний час не підтримуються в Internet Explorer 11: caniuse.com/#search=URLSearchParams
WoIIe

Цю саму відповідь за півроку до вас відповів @Alister
FantomX1

10

Була б життєздатною альтернативою маніпуляції з рядком встановити html formта просто змінити значенняrows елемента?

Отже, з htmlцим щось подібне

<form id='myForm' target='site.fwx'>
    <input type='hidden' name='position' value='1'/>
    <input type='hidden' name='archiveid' value='5000'/>
    <input type='hidden' name='columns' value='5'/>
    <input type='hidden' name='rows' value='20'/>
    <input type='hidden' name='sorting' value='ModifiedTimeAsc'/>
</form>

За допомогою наступного JavaScript для подання форми

var myForm = document.getElementById('myForm');
myForm.rows.value = yourNewValue;
myForm.submit();

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


Це розумний.
icarito

7

Ви можете використовувати цю мою бібліотеку, щоб зробити цю роботу: https://github.com/Mikhus/jsurl

var url = new Url('site.fwx?position=1&archiveid=5000&columns=5&rows=20&sorting=ModifiedTimeAsc');
url.query.rows = 10;
alert( url);

4

2020 Рішення : встановлює змінний або видаляє ить , якщо ви передаєте nullабо undefinedдо значення.

var setSearchParam = function(key, value) {
    if (!window.history.pushState) {
        return;
    }

    if (!key) {
        return;
    }

    var url = new URL(window.location.href);
    var params = new window.URLSearchParams(window.location.search);
    if (value === undefined || value === null) {
        params.delete(key);
    } else {
        params.set(key, value);
    }

    url.search = params;
    url = url.toString();
    window.history.replaceState({url: url}, null, url);
}

Зауважимо, що URLSearchParamsне працює в останніх версіях усіх основних браузерів (2020)
Олівер Шиммер

як і раніше доступні в основних браузерах: developer.mozilla.org/en-US/docs/Web/API/URLSearchParams , googlechrome.github.io/samples/urlsearchparams/index.html
Alper Ebicoglu

Це підтримується у всіх основних браузерах , крім IE11: caniuse.com/#search=URLSearchParams
Луїс Пауло Lohmann

Навіть якщо вона почала підтримуватись, на цю ж відповідь із URLSearchParams відповіли на це питання принаймні 3 рази, вже відповіли 15 січня 1717 о 15:24, відповіли 14 червня 18 у 15:54 та відповіли 1 березня 1919 о 12:46, наче ніхто з вас не читав відповіді перед публікацією
FantomX1

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

3

Я написав маленьку функцію помічника, яка працює з будь-яким виділеним. Все, що вам потрібно зробити - це додати клас "redirectOnChange" до будь-якого елемента вибору, і це призведе до перезавантаження сторінки новим / зміненим параметром запиту рядків, рівним ідентифікатору та значенню вибору, наприклад:

<select id="myValue" class="redirectOnChange"> 
    <option value="222">test222</option>
    <option value="333">test333</option>
</select>

Наведений вище приклад додасть "? MyValue = 222" або "? MyValue = 333" (або використовуючи "&", якщо існують інші параметри) та перезавантажує сторінку.

jQuery:

$(document).ready(function () {

    //Redirect on Change
    $(".redirectOnChange").change(function () {
        var href = window.location.href.substring(0, window.location.href.indexOf('?'));
        var qs = window.location.href.substring(window.location.href.indexOf('?') + 1, window.location.href.length);
        var newParam = $(this).attr("id") + '=' + $(this).val();

        if (qs.indexOf($(this).attr("id") + '=') == -1) {
            if (qs == '') {
                qs = '?'
            }
            else {
                qs = qs + '&'
            }
            qs = qs + newParam;

        }
        else {
            var start = qs.indexOf($(this).attr("id") + "=");
            var end = qs.indexOf("&", start);
            if (end == -1) {
                end = qs.length;
            }
            var curParam = qs.substring(start, end);
            qs = qs.replace(curParam, newParam);
        }
        window.location.replace(href + '?' + qs);
    });
});

На сьогодні найкраще рішення на цій сторінці
ed209

2

Тут я взяв відповідь Аділа Маліка і виправив 3 питання, які я з ним ототожнив.

/**
 * Adds or updates a URL parameter.
 *
 * @param {string} url  the URL to modify
 * @param {string} param  the name of the parameter
 * @param {string} paramVal  the new value for the parameter
 * @return {string}  the updated URL
 */
self.setParameter = function (url, param, paramVal){
  // http://stackoverflow.com/a/10997390/2391566
  var parts = url.split('?');
  var baseUrl = parts[0];
  var oldQueryString = parts[1];
  var newParameters = [];
  if (oldQueryString) {
    var oldParameters = oldQueryString.split('&');
    for (var i = 0; i < oldParameters.length; i++) {
      if(oldParameters[i].split('=')[0] != param) {
        newParameters.push(oldParameters[i]);
      }
    }
  }
  if (paramVal !== '' && paramVal !== null && typeof paramVal !== 'undefined') {
    newParameters.push(param + '=' + encodeURI(paramVal));
  }
  if (newParameters.length > 0) {
    return baseUrl + '?' + newParameters.join('&');
  } else {
    return baseUrl;
  }
}

1

Ось що я роблю. Використовуючи мою функцію editParams (), ви можете додавати, видаляти або змінювати будь-який параметр, а потім використовувати вбудовану функцію substituState () для оновлення URL-адреси:

window.history.replaceState('object or string', 'Title', 'page.html' + editParams('sorting', ModifiedTimeAsc));


// background functions below:

// add/change/remove URL parameter
// use a value of false to remove parameter
// returns a url-style string
function editParams (key, value) {
  key = encodeURI(key);

  var params = getSearchParameters();

  if (Object.keys(params).length === 0) {
    if (value !== false)
      return '?' + key + '=' + encodeURI(value);
    else
      return '';
  }

  if (value !== false)
    params[key] = encodeURI(value);
  else
    delete params[key];

  if (Object.keys(params).length === 0)
    return '';

  return '?' + $.map(params, function (value, key) {
    return key + '=' + value;
  }).join('&');
}

// Get object/associative array of URL parameters
function getSearchParameters () {
  var prmstr = window.location.search.substr(1);
  return prmstr !== null && prmstr !== "" ? transformToAssocArray(prmstr) : {};
}

// convert parameters from url-style string to associative array
function transformToAssocArray (prmstr) {
  var params = {},
      prmarr = prmstr.split("&");

  for (var i = 0; i < prmarr.length; i++) {
    var tmparr = prmarr[i].split("=");
    params[tmparr[0]] = tmparr[1];
  }
  return params;
}

Оцінка без коментарів? Що не так з кодом? Це працює фантастично для багатьох ситуацій.
Bobb Fwed

1

Моє рішення:

const setParams = (data) => {
    if (typeof data !== 'undefined' && typeof data !== 'object') {
        return
    }

    let url = new URL(window.location.href)
    const params = new URLSearchParams(url.search)

    for (const key of Object.keys(data)) {
        if (data[key] == 0) {
            params.delete(key)
        } else {
            params.set(key, data[key])
        }
    }

    url.search = params
    url = url.toString()
    window.history.replaceState({ url: url }, null, url)
}

Потім просто зателефонуйте "setParams" і передайте об'єкт із даними, які ви хочете встановити.

Приклад:

$('select').on('change', e => {
    const $this = $(e.currentTarget)
    setParams({ $this.attr('name'): $this.val() })
})

У моєму випадку мені довелося оновити вхід для вибору html, коли він змінюється, і якщо значення "0", видаліть параметр. Ви можете відредагувати функцію та видалити параметр із URL-адреси, якщо клавіша об'єкта також є "null".

Сподіваюсь, що це допомагає поздоровитись


перед вами вже дві однакові відповіді з URLSearchParams, як ніби ніхто з вас не читав відповіді. Опубліковано відповів 15 січня 1717 о 15:24, відповів 14 червня 18 о 15:54
FantomX1

0

Ще одна варіація відповіді Сухоя. Просто змінив імена змінних і додав обгортку простору імен:

window.MyNamespace = window.MyNamespace  || {};
window.MyNamespace.Uri = window.MyNamespace.Uri || {};

(function (ns) {

    ns.SetQueryStringParameter = function(url, parameterName, parameterValue) {

        var otherQueryStringParameters = "";

        var urlParts = url.split("?");

        var baseUrl = urlParts[0];
        var queryString = urlParts[1];

        var itemSeparator = "";
        if (queryString) {

            var queryStringParts = queryString.split("&");

            for (var i = 0; i < queryStringParts.length; i++){

                if(queryStringParts[i].split('=')[0] != parameterName){

                    otherQueryStringParameters += itemSeparator + queryStringParts[i];
                    itemSeparator = "&";
                }
            }
        }

        var newQueryStringParameter = itemSeparator + parameterName + "=" + parameterValue;

        return baseUrl + "?" + otherQueryStringParameters + newQueryStringParameter;
    };

})(window.MyNamespace.Uri);

Зараз користування:

var changedUrl = MyNamespace.Uri.SetQueryStringParameter(originalUrl, "CarType", "Ford");

0

Я теж написав бібліотеку для отримання та встановлення параметрів запитів URL у JavaScript .

Ось приклад його використання.

var url = Qurl.create()
  , query
  , foo
  ;

Отримуйте параметри запитів як об’єкт, за ключем, або додайте / змінюйте / видаляйте.

// returns { foo: 'bar', baz: 'qux' } for ?foo=bar&baz=qux
query = url.query();

// get the current value of foo
foo = url.query('foo');

// set ?foo=bar&baz=qux
url.query('foo', 'bar');
url.query('baz', 'qux');

// unset foo, leaving ?baz=qux
url.query('foo', false); // unsets foo


-1

Я знаю, це старе питання. Я вдосконалив функцію вище, щоб додати або оновити параметри запитів. Все ще чисте рішення JS.

                      function addOrUpdateQueryParam(param, newval, search) {

                        var questionIndex = search.indexOf('?');

                        if (questionIndex < 0) {
                            search = search + '?';
                            search = search + param + '=' + newval;
                            return search;
                        }

                        var regex = new RegExp("([?;&])" + param + "[^&;]*[;&]?");
                        var query = search.replace(regex, "$1").replace(/&$/, '');

                        var indexOfEquals = query.indexOf('=');

                        return (indexOfEquals >= 0 ? query + '&' : query + '') + (newval ? param + '=' + newval : '');
                    }

-1

моя функція підтримки видалення парам

function updateURLParameter(url, param, paramVal, remove = false) {
        var newAdditionalURL = '';
        var tempArray = url.split('?');
        var baseURL = tempArray[0];
        var additionalURL = tempArray[1];
        var rows_txt = '';

        if (additionalURL)
            newAdditionalURL = decodeURI(additionalURL) + '&';

        if (remove)
            newAdditionalURL = newAdditionalURL.replace(param + '=' + paramVal, '');
        else
            rows_txt = param + '=' + paramVal;

        window.history.replaceState('', '', (baseURL + "?" + newAdditionalURL + rows_txt).replace('?&', '?').replace('&&', '&').replace(/\&$/, ''));
    }

-1

Я щойно написав простий модуль для розгляду читання та оновлення поточних параметрів запитів URL.

Приклад використання:

import UrlParams from './UrlParams'

UrlParams.remove('foo') //removes all occurences of foo=?
UrlParams.set('foo', 'bar') //set all occurences of foo equal to bar
UrlParams.add('foo', 'bar2') //add bar2 to foo result: foo=bar&foo=bar2
UrlParams.get('foo') //returns bar
UrlParams.get('foo', true) //returns [bar, bar2]

Ось мій код на ім'я UrlParams. (Js / ts):

class UrlParams {

    /**
     * Get params from current url
     * 
     * @returns URLSearchParams
     */
    static getParams(){
        let url = new URL(window.location.href)
        return new URLSearchParams(url.search.slice(1))
    }

    /**
     * Update current url with params
     * 
     * @param params URLSearchParams
     */
    static update(params){
        if(`${params}`){
            window.history.replaceState({}, '', `${location.pathname}?${params}`)
        } else {
            window.history.replaceState({}, '', `${location.pathname}`)
        }
    }

    /**
     * Remove key from url query
     * 
     * @param param string
     */
    static remove(param){
        let params = this.getParams()
        if(params.has(param)){
            params.delete(param)
            this.update(params)
        }
    }

    /**
     * Add key value pair to current url
     * 
     * @param key string
     * @param value string
     */
    static add(key, value){
        let params = this.getParams()
        params.append(key, value)
        this.update(params)
    }

    /**
     * Get value or values of key
     * 
     * @param param string
     * @param all string | string[]
     */
    static get(param, all=false){
        let params = this.getParams()
        if(all){
            return params.getAll(param)
        }
        return params.get(param)
    }

    /**
     * Set value of query param
     * 
     * @param key string
     * @param value string
     */
    static set(key, value){
        let params = this.getParams()
        params.set(key, value)
        this.update(params)
    }

}
export default UrlParams
export { UrlParams }

Ось уже 4 відповіді, про які ви згадували, опубліковані: відповів 15 січня 1717 о 15:24, відповів 14 червня 1818 о 15:54, відповів 1 березня 1919 о 12:46 і відповів 14 червня 1919 о 7: 20, наче ніхто з вас насправді не читав відповіді перед публікацією
FantomX1

-2
     // usage: clear ; cd src/js/node/js-unit-tests/01-set-url-param ; npm test ; cd -
     // prereqs: , nodejs , mocha
     // URI = scheme:[//authority]path[?paramName1=paramValue1&paramName2=paramValue2][#fragment]
     // call by: uri = uri.setUriParam("as","md")
     String.prototype.setUriParam = function (paramName, paramValue) {
        var uri = this
        var fragment = ( uri.indexOf('#') === -1 ) ? '' : uri.split('#')[1]
        uri = ( uri.indexOf('#') === -1 ) ? uri : uri.split('#')[0]
        if ( uri.indexOf("?") === -1 ) { uri = uri + '?&' }
        uri = uri.replace ( '?' + paramName , '?&' + paramName)
        var toRepl = (paramValue != null) ? ('$1' + paramValue) : ''
        var toSrch = new RegExp('([&]' + paramName + '=)(([^&#]*)?)')
        uri = uri.replace(toSrch,toRepl)
        if (uri.indexOf(paramName + '=') === -1 && toRepl != '' ) {
           var ampersandMayBe = uri.endsWith('&') ? '' : '&'
           uri = uri + ampersandMayBe + paramName + "=" + String(paramValue)
        }
        uri = ( fragment.length == 0 ) ? uri : (uri+"#"+fragment) //may-be re-add the fragment
        return uri
     }

     var assert = require('assert');
     describe('replacing url param value', function () {

        // scheme://authority/path[?p1=v1&p2=v2#fragment
        // a clean url
        it('http://org.com/path -> http://org.com/path?&prm=tgt_v', function (){
           var uri = 'http://site.eu:80/qto/view/devops_guide_doc'
           var uriExpected = 'http://site.eu:80/qto/view/devops_guide_doc?&bid=10'
           var uriActual = uri.setUriParam("bid",10)
           assert.equal(uriActual, uriExpected);
        });

        // has the url param existing after the ? with num value
        it('http://org.com/path?prm=src_v -> http://org.com/path?&prm=tgt_v', function (){
           var uri = 'http://site.eu:80/qto/view/devops_guide_doc?bid=57'
           var uriExpected = 'http://site.eu:80/qto/view/devops_guide_doc?&bid=10'
           var uriActual = uri.setUriParam("bid",10)
           assert.equal(uriActual, uriExpected);
        });

        // has the url param existing after the ? but string value
        it('http://org.com/path?prm=src_v -> http://org.com/path?&prm=tgt_v', function (){
           var uri = 'http://site.eu:80/qto/view/devops_guide_doc?bid=boo-bar'
           var uriExpected = 'http://site.eu:80/qto/view/devops_guide_doc?&bid=boo-bar-baz'
           var uriActual = uri.setUriParam("bid","boo-bar-baz")
           assert.equal(uriActual, uriExpected);
        });

        // has the url param existing after the ?& but string value
        it('http://org.com/path?&prm=src_v -> http://org.com/path?&prm=tgt_v', function (){
           var uri = 'http://site.eu:80/qto/view/devops_guide_doc?&bid=5'
           var uriExpected = 'http://site.eu:80/qto/view/devops_guide_doc?&bid=10'
           var uriActual = uri.setUriParam("bid",10)
           assert.equal(uriActual, uriExpected);
        });

        // has the url param existing after the ? with other param
        it('http://org.com/path?prm=src_v&other_p=other_v -> http://org.com/path?&prm=tgt_v&other_p=other_v', function (){
           var uri = 'http://site.eu:80/qto/view/devops_guide_doc?bid=5&other_p=other_v'
           var uriExpected = 'http://site.eu:80/qto/view/devops_guide_doc?&bid=10&other_p=other_v'
           var uriActual = uri.setUriParam("bid",10)
           assert.equal(uriActual, uriExpected);
        });

        // has the url param existing after the ?& with other param
        it('http://org.com/path?&prm=src_v&other_p=other_v -> http://org.com/path?&prm=tgt_v&other_p=other_v', function (){
           var uri = 'http://site.eu:80/qto/view/devops_guide_doc?&bid=5&other_p&other_v'
           var uriExpected = 'http://site.eu:80/qto/view/devops_guide_doc?&bid=10&other_p&other_v'
           var uriActual = uri.setUriParam("bid",10)
           assert.equal(uriActual, uriExpected);
        });

        // has the url param existing after the ? with other param with fragment
        it('http://org.com/path?prm=src_v&other_p=other_v#f -> http://org.com/path?&prm=tgt_v&other_p=other_v#f', function (){
           var uri = 'http://site.eu:80/qto/view/devops_guide_doc?bid=5&other_p=other_v#f'
           var uriExpected = 'http://site.eu:80/qto/view/devops_guide_doc?&bid=10&other_p=other_v#f'
           var uriActual = uri.setUriParam("bid",10)
           assert.equal(uriActual, uriExpected);
        });

        // has the url param existing after the ?& with other param with fragment
        it('http://org.com/path?&prm=src_v&other_p=other_v#f -> http://org.com/path?&prm=tgt_v&other_p=other_v#f', function (){
           var uri = 'http://site.eu:80/qto/view/devops_guide_doc?&bid=5&other_p&other_v#f'
           var uriExpected = 'http://site.eu:80/qto/view/devops_guide_doc?&bid=10&other_p&other_v#f'
           var uriActual = uri.setUriParam("bid",10)
           assert.equal(uriActual, uriExpected);
        });

        // remove the param-name , param-value pair
        it('http://org.com/path?prm=src_v&other_p=other_v#f -> http://org.com/path?&prm=tgt_v&other_p=other_v#f', function (){
           var uri = 'http://site.eu:80/qto/view/devops_guide_doc?bid=5&other_p=other_v#f'
           var uriExpected = 'http://site.eu:80/qto/view/devops_guide_doc?&other_p=other_v#f'
           var uriActual = uri.setUriParam("bid",null)
           assert.equal(uriActual, uriExpected);
        });

        // remove the param-name , param-value pair
        it('http://org.com/path?&prm=src_v&other_p=other_v#f -> http://org.com/path?&prm=tgt_v&other_p=other_v#f', function (){
           var uri = 'http://site.eu:80/qto/view/devops_guide_doc?&bid=5&other_p=other_v#f'
           var uriExpected = 'http://site.eu:80/qto/view/devops_guide_doc?&other_p=other_v#f'
           var uriActual = uri.setUriParam("bid",null)
           assert.equal(uriActual, uriExpected);
        });

        // add a new param name , param value pair
        it('http://org.com/path?prm=src_v&other_p=other_v#f -> http://org.com/path?&prm=tgt_v&other_p=other_v#f', function (){
           var uri = 'http://site.eu:80/qto/view/devops_guide_doc?&other_p=other_v#f'
           var uriExpected = 'http://site.eu:80/qto/view/devops_guide_doc?&other_p=other_v&bid=foo-bar#f'
           var uriActual = uri.setUriParam("bid","foo-bar")
           assert.equal(uriActual, uriExpected);
        });

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