Вопрос по javascript – Изменить параметры URL

165

У меня есть этот URL:

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

что мне нужно, чтобы иметь возможность изменять «строки»; значение параметра url для чего-то, что я указываю, скажем, 10. И если «строки» не существует, мне нужно добавить его в конец URL-адреса и добавить значение, которое я уже указал (10).

@ TylerCollier середина 2015 года и сейчас еще ничего :( Tejas Manohar
Смотрите мой ответ для современного решения: Stackoverflow.com / а / 19965480/64949 Sindre Sorhus
Легкий, без плагинов ответ: Stackoverflow.com / а / 10997390/11236 ripper234
Кажется, мы туда добираемся ... Developer.mozilla.org / EN-US / Docs / Web / API / URLSearchParams / ... chris
Я не могу поверить, что сейчас 2013 год, и нет лучшего способа сделать это, чем то, что встроено в основные библиотеки браузеров. Tyler Collier

Ваш Ответ

21   ответ
95

Я расширил код 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;
}
Незначительная очистка кода / форматирование / правописание. ripper234
Я не могу заставить это работать. Вот мой код: Jsfiddle.net / Draven / tTPYL / 1 URL будет выглядеть какhttp://www.domain.com/index.php?action=my_action&view-all=Yes и мне нужно изменить значение "view-all". Мой ТАК вопрос, который был закрыт: / Stackoverflow.com вопросы / 13025880 / ... Draven
Вы уверены? это сработало для меня легко. Проверьте это здесь: Jsfiddle.net / mw49a Adil Malik
Используйте «var i = 0» вместо «i = 0», чтобы предотвратить создание / изменение i как глобальной переменной. Jonathan Aquino
Пара других проблем с этой функцией: (1) paramVal не кодируется URI. (2) если paramVal равен нулю, тогда вы получите foo = null. Это должно быть foo = (или даже лучше, удалить foo полностью). Jonathan Aquino
88

query плагин.

Например.

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

Это будет работать независимо от текущего состояния строк.

+ 1 действительно хорошее решение .. раньше такого не видел Harry Lime
Mofle, потому что плагин Query использует decodeURIComponent, а decodeURIComponent ("% F8") недопустим. Matthew Flaschen
Получите эти странные вещи из вашего URL. Или, другими словами, «измените строку запроса, чтобы использовать только допустимые символы UTF-8». :) Только F8 не является допустимым символом UTF-8. Matthew Flaschen
@ Wraith, вам не нужен плагин для этого. Это простоwindow.location.pathname. Matthew Flaschen
@ MattNorris Вам не нужен плагин для этого, но правильный ответ: window.location.host + window.location.pathname В вашем случае это будет "www.youtube.com/watch" nktssh
62

Во, который позволяет легко манипулировать строкой запроса.

Как просили

Получил свою тестовую страницуВо

В firebug введите в консоль следующ

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

Он вернет вам следующую исправленную строку URL

http: //benalman.com/code/test/js-jquery-url-querystring.html а = 3 & Ь = У & с = Z & новое_значение = 100 # п = 1 & о = 2 & р = 3

Обратите внимание, что значение строки запроса для a было изменено с X на 3 и добавлено новое значение.

Затем вы можете использовать новую строку URL-адреса, как пожелаете, например, используя document.location = newUrl или изменить ссылку привязки и т. Д.

Разве это не jQuery.param.querystring вместо jQuery.queryString? Petr Peller
TypeError: jQuery.param.querystring is not a function TMS
обновил мой ответ, чтобы показать использование redsquare
Чтобы избежать 'TypeError', оно должно быть: jQuery.queryString (window.location.href, 'a = 3 & newValue = 100') code-gijoe
ты должен позвонитьjQuery.param.querystring. Я думаю, они реорганизовали библиотеку. Will Wu
58

после того, как я многому научился. Тем более, что вы не должны использовать 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);
большое спасибо!! спас мой день !! Sunny Sharma
Вот это очень простое решение. Спасибо jetlej
Это работает как чемпион! Спасибо, Синдре (все, что тебе нужно сделать, это минимизировать "query-string / index.js" и вставить его внизу своего js) Ron Royston
53

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

edit, спасибо Люк: Чтобы полностью удалить параметр, передайтеfalse илиnull для значения:replaceQueryParam('rows', false, params). Поскольку0 это тоже фальшивка, уточнить'0'.

Также для удаления используемого параметра из выходных данных сделайте следующее: str = replaceQueryParam ('oldparam', false, str) - в основном установите значение типа false Luke Wenke
есть проблема, дублирование моего параметра без уважительной причины, проверьте это похожее решение Stackoverflow.com / а / 20420424/3160597 azerafati
@ Bludream, этот код работает в производстве в течение многих лет. Я еще не видел, чтобы он дублировал параметр. Можете ли вы опубликовать репродукцию или более конструктивную информацию? bronson
@ Bludream Теперь я понимаю, это сценарий, на который вы ссылались, который добавляет дубликаты параметров. :) bronson
@ dVyper правильно, ложное значение полностью удаляет параметр. Используйте текст «0» вместо целого числа 0. bronson
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-адрес, имя параметра, который вы ищете, новое значение и логическое значение, сообщающее, хотите ли вы добавить параметр в строку запроса, если я не нашел его там в настоящее время. Функция возвращает измененный URL. Gromer
Gormer, вы должны поделиться этой функцией с другими:) Adil Malik
Отличный фрагмент. Я тоже превратил это в функцию для собственного варианта использования. Спасибо, что поделился! + 1 robabby
Функция: Stackoverflow.com / а / 10997390/11236 ripper234
не работает с хэшем Joao Leme
23

арта на основе 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.
Было бы неплохо ... но это не так, как IE не поддерживает его вообще, и использование полифилов для такой мелочи совершенно исключено. forsberg
this также полностью кодирует исходную строку paramsString, поэтому результат выглядит какsite.fwx%3Fposition=1&archiveid=5000&columns=5&rows=10&sorting=ModifiedTimeAsc что сбивает с толку, потому что это не то, что вы бы построили, если бы сделали это вручную ... Ben Wheeler
9

а htmlform и просто измените значение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
6

https: //github.com/Mikhus/jsur

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

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);
  }
}
Сэкономила мое время ... спасибо Swap-IOS-Android
3

которая работает с любым выбором. Все, что вам нужно сделать, это добавить класс "redirectOnChange" к любому элементу select, и это приведет к перезагрузке страницы с новым / измененным параметром строки запроса, равным id и значению select, например:

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

library для получения и установки параметров запроса 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
Для downvoter: ты не оставляешь комментарий? CoolAJ86
0

вы можете добавить, удалить или изменить любой параметр, а затем использовать встроенную функцию replaceState () для обновления 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
0

https: //github.com/medialize/URI.j что довольно мило

-- Обновит

Я нашел лучшую посылку:https: //www.npmjs.org/package/q он также работает с массивами в параметрах get.

0

Мое решение:

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».

Надеюсь, это поможет тебе

-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

function isDefined(object) {
	return object !== undefined && object !== null;
}

function isNotEmpty(string) {
	return isDefined(string) && string.length > 0;
}

/**
 * Update or add the specified URL parameter.
 * <p>
 * @param {String} name
 * @param {String} value
 */
function updateUrlParam(name, value) {
	// Get the path and the query
	var urlInfo = decodeURI(window.location.href).split('?');
	var path = urlInfo[0];
	var query = urlInfo[1];

	// Build the query
	var params = '';
	var anchor = null;
	if (isNotEmpty(query)) {
		var queryInfo = query.split('#');
		query = queryInfo[0];
		anchor = queryInfo[1];

		queryInfo = query.split('&');
		for (var i = 0; i < queryInfo.length; ++i) {
			if (queryInfo[i].split('=')[0] !== name) {
				params += '&' + queryInfo[i];
			}
		}
	} else {
		var queryInfo = path.split('#');
		query = queryInfo[0];
		anchor = queryInfo[1];
		if (isNotEmpty(query)) {
			path = query;
		}
	}
	query = '?' + name + '=' + value + params;
	if (isNotEmpty(anchor)) {
		query += '#' + anchor;
	}

	// Replace the URL
	window.history.replaceState('', '', encodeURI(path + query));
}

-1
     // 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 wit,h 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);
        });

     });

Похожие вопросы