Изменить значение параметра запроса с помощью jQuery

Мне нужно изменить значение параметра запроса, присутствующего в данном URL-адресе, с помощью jQuery.

Есть 2 возможных URL-адреса, например,

www.domain.com/?id=10&name=xxx

а также

www.domain.com/?name=xxx&id=10

Мне нужно изменить значение параметра id в этом URL-адресе на что-то вроде www.domain.com/?id=15&name=xxx. Regex кажется решением для этого, но мне это кажется запутанным.

Возможное решение:

Выберите строку между "id=" и "&" (или) строку от "id=" до конца строки и замените ее с желаемым значением 15.

У кого-нибудь есть решение для этого или любого другого лучшего решения?

Заранее спасибо!


person Vinoth Selvi    schedule 13.12.2018    source источник
comment
Если вы выполните поиск в Google по названию, вы получите много ответов на свой вопрос.   -  person Carsten Løvbo Andersen    schedule 13.12.2018
comment
Конечно, я сделал. Но ни одно из них не похоже на точное решение.   -  person Vinoth Selvi    schedule 13.12.2018
comment
Вы уже просмотрели URLSearchParams? Существует даже JS-полифилл для браузеров, которые изначально его не поддерживают.   -  person Agi Hammerthief    schedule 13.12.2018
comment
Ваш вопрос не ясен. Где этот URL, который вы хотите изменить? Является ли это фактическим URL-адресом страницы, на которой вы работаете? Это href в <a>? Кроме того, вам также необходимо сообщить нам точно чего вы хотите, а не что-то вроде... Означает ли то, что вы сказали, что вы хотите, чтобы и www.domain.com/?id=10&name=xxx, и www.domain.com/?name=xxx&id=10 были изменены на www.domain.com/?id=15&name=xxx? Вас действительно волнует порядок (возможно, что порядок имеет значение, но обычно это не так. Вы просто не сказали нам, чего вы на самом деле хотите)?   -  person Makyen♦    schedule 13.12.2018
comment
Редактирование вопросов с целью их улучшения (например, уточнение, добавление дополнительной информации и т. д.) рекомендуется. Тем не менее, редактирование вопроса с целью преобразования его в другой вопрос, что приводит к аннулированию ответа, противоречит политике переполнения стека. Ваше редактирование здесь сделало это. Политика заключается в том, что другие пользователи должны заранее отменить такие изменения. Я сделал так здесь. Вам рекомендуется задать новый вопрос, возможно, со ссылкой на этот для дополнительного контекста. Мы хотим помочь, но ваш новый/дополнительный вопрос должен быть новым Вопросом.   -  person Makyen♦    schedule 13.12.2018
comment
@Makyen Конечно. Я задам новый вопрос.   -  person Vinoth Selvi    schedule 13.12.2018


Ответы (2)


var url="www.domain.com/?id=10&name=xxx";
changeUrl("id",15);
changeUrl("name","sumesh");
function changeUrl(key,value){
  var patt = new RegExp(key+"=[a-zA-Z0-9]+");
  var matches = patt.exec(url);
  var id2 = matches[0];
  url = url.replace(id2, key+'='+value);
  console.log(url);
}

Используйте RegExp для этого.

person Sumesh TG    schedule 13.12.2018
comment
Идентификатор параметра является просто примером. Мне нужно общее регулярное выражение, которое также должно подходить для изменения имени параметра. - person Vinoth Selvi; 13.12.2018
comment
Общий значит как? хотите изменить всю строку запроса? - person Sumesh TG; 13.12.2018
comment
Вы дали регулярное выражение для целого числа. Предположим, у меня есть функция, которая принимает параметр и значение. Если я передам (id, 15) или (name, yyy), этот метод должен работать. - person Vinoth Selvi; 13.12.2018
comment
По крайней мере, используйте [0-9]+, а лучше просто класс персонажей \d+. - person Makyen♦; 13.12.2018
comment
@VinothKumar Это не то, о чем просит ваш вопрос. Если вы этого хотите, вам нужно было указать это в вашем вопросе и до того, как люди ответят. Вам нужно будет создать новый вопрос, чтобы запросить обобщение, которое вы, кажется, хотите, поскольку изменение вопроса таким образом, что вы аннулируете ответы, противоречит политике. - person Makyen♦; 13.12.2018
comment
@SumeshTG Спасибо. Это работает для того, что я просил. Мне нужно задать отдельный вопрос для вашего решения. В любом случае, я поддерживаю ваш ответ. - person Vinoth Selvi; 13.12.2018
comment
@SumeshTG Буквенно-цифровые символы — не единственные, которые допустимы в значениях запроса. Ваша строка var id2 = matches[0]; вызовет исключение, если поле key не существует в URL-адресе. И ваш RegExp, чтобы найти исходное значение, и ваш url.replace будут молча давать ошибочные результаты, если есть поля (параметры запроса), которые слишком похожи (например, запрос fooid=100&id=10, и вы пытаетесь изменить id). - person Makyen♦; 13.12.2018
comment
@Makyen Ты прав. - person Sumesh TG; 13.12.2018

Почему бы вам не использовать простую замену?

var newUrl = location.href.replace("id="+10, "id="+15);

Я нашел это решение из ответа на вопрос Изменить значение строки запроса URL с помощью jQuery (помечено как дубликат).

person RashFlash    schedule 13.12.2018
comment
Но я не знаю значение 10, так как оно случайное. Как я могу справиться с этим? - person Vinoth Selvi; 13.12.2018