Как заменить параметр url на javascript / jquery?
Я искал эффективный способ сделать это, но не смог его найти, в основном мне нужно, чтобы этот url-адрес, например:
http://localhost/mysite/includes/phpThumb.php?src=http://media2.jupix.co.uk/v3/clients/4/properties/795/IMG_795_1_large.jpg&w=592&aoe=1&q=100
Я хотел бы иметь возможность изменить URL-адрес в src
параметр с другим значением, использующим javascript или jquery, возможно ли это?
спасибо заранее.
9 ответов
разве это не было бы лучшим решением?
var text = 'http://localhost/mysite/includes/phpThumb.php?src=http://media2.jupix.co.uk/v3/clients/4/properties/795/IMG_795_1_large.jpg&w=592&aoe=1&q=100';
var newSrc = 'www.google.com';
var newText = text.replace(/(src=).*?(&)/,'' + newSrc + '');
EDIT:
добавил некоторую ясность в коде и сохранил " src " в полученной ссылке
представляет первую часть в
()
(Я.е) src=
и представляет вторую часть в
()
(Я.е) &
, так что это означает, что вы собираетесь изменить значение между src
и &
. Более ясно, это должно быть так:
src='changed value'& // this is to be replaced with your original url
следующее решение объединяет другие ответы и обрабатывает некоторые специальные случаи:
- параметр не существует в исходном url
- параметр-единственный параметр
- параметр первый или последний
- новое значение параметра совпадает со старым
- url заканчивается на
?
символ -
\b
обеспечивает еще один параметр заканчивая paramName не будет совпадение
устранение:
function replaceUrlParam(url, paramName, paramValue)
{
if (paramValue == null) {
paramValue = '';
}
var pattern = new RegExp('\b('+paramName+'=).*?(&|#|$)');
if (url.search(pattern)>=0) {
return url.replace(pattern,'' + paramValue + '');
}
url = url.replace(/[?#]$/,'');
return url + (url.indexOf('?')>0 ? '&' : '?') + paramName + '=' + paramValue;
}
известные ограничения:
- не очищает параметр, устанавливая paramValue в null, вместо этого он устанавливает его в пустую строку. См.https://stackoverflow.com/a/25214672 Если вы хотите удалить параметр.
Javascript теперь дает очень полезную функциональность для обработки параметров url:URLSearchParams
var searchParams = new URLSearchParams(window.location.search);
searchParams.set('src','newSrc')
var newParams = searchParams.toString()
var href = new URL('https://google.com?q=cats');
href.searchParams.set('q', 'dogs');
console.log(href.toString()); // https://google.com/?q=dogs
здесь изменен код stenix, он не идеален, но он обрабатывает случаи, когда в url-адресе есть параметр, содержащий предоставленный параметр, например:
/search?searchquery=text and 'query' is provided.
в этом случае изменяется значение параметра searchquery.
код:
function replaceUrlParam(url, paramName, paramValue){
var pattern = new RegExp('(\?|\&)('+paramName+'=).*?(&|$)')
var newUrl=url
if(url.search(pattern)>=0){
newUrl = url.replace(pattern,'' + paramValue + '');
}
else{
newUrl = newUrl + (newUrl.indexOf('?')>0 ? '&' : '?') + paramName + '=' + paramValue
}
return newUrl
}
UpdatE: сделайте его хорошей функцией для вас:http://jsfiddle.net/wesbos/KH25r/1/
function swapOutSource(url, newSource) {
params = url.split('&');
var src = params[0].split('=');
params.shift();
src[1] = newSource;
var newUrl = ( src.join('=') + params.join('&'));
return newUrl;
}
тогда вперед!
var newUrl = swapOutSource("http://localhost/mysite/includes/phpThumb.php?src=http://media2.jupix.co.uk/v3/clients/4/properties/795/IMG_795_1_large.jpg&w=592&aoe=1&q=100","http://link/to/new.jpg");
console.log(newUrl);
Если вы посмотрите внимательно, вы увидите две удивительные вещи об URL-адресах: (1) они кажутся простыми, но детали и угловые случаи на самом деле сложны, (2) удивительно JavaScript не предоставляет полный API для облегчения работы с ними. Я думаю, что полноценная библиотека предназначена для того, чтобы люди не изобретали колесо сами или не копировали умный, но, вероятно, ошибочный фрагмент кода regex. Может, попробуем Ури.js (http://medialize.github.io/URI.js/)
в дополнение к @stenix, это отлично сработало для меня
url = window.location.href;
paramName = 'myparam';
paramValue = $(this).val();
var pattern = new RegExp('('+paramName+'=).*?(&|$)')
var newUrl = url.replace(pattern,'' + paramValue + '');
var n=url.indexOf(paramName);
alert(n)
if(n == -1){
newUrl = newUrl + (newUrl.indexOf('?')>0 ? '&' : '?') + paramName + '=' + paramValue
}
window.location.href = newUrl;
здесь нет необходимости сохранять переменную "url", просто замените в текущем url
Как насчет чего-то вроде этого:
<script>
function changeQueryVariable(keyString, replaceString) {
var query = window.location.search.substring(1);
var vars = query.split("&");
var replaced = false;
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=");
if (pair[0] == keyString) {
vars[i] = pair[0] + "="+ replaceString;
replaced = true;
}
}
if (!replaced) vars.push(keyString + "=" + replaceString);
return vars.join("&");
}
</script>