J'ai cherché un moyen efficace de le faire, mais je n'ai pas pu le trouver, en gros, ce dont j'ai besoin, c'est que, compte tenu de cette URL, par exemple:
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
Je voudrais pouvoir modifier l'URL dans le paramètre src
avec une autre valeur en utilisant javascript ou jquery, est-ce possible?
Merci d'avance.
Cette solution ne serait-elle pas meilleure?
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=).*?(&)/,'$1' + newSrc + '$2');
MODIFIER:
A ajouté une certaine clarté dans le code et a gardé 'src' dans le lien résultant
$1
représente la première partie dans le ()
(c.-à-d.) src=
et $2
représente la deuxième partie dans le ()
(c.-à-d.), Ce qui indique que vous allez modifier la valeur entre src
et &
. Plus clair, il devrait être comme ceci:
src='changed value'& // this is to be replaced with your original url
J'ai combiné les autres réponses et je me suis assuré de gérer les cas particuliers:
C'est ma solution:
function replaceUrlParam(url, paramName, paramValue){ if(paramValue == null) paramValue = ''; var pattern = new RegExp('\\b('+paramName+'=).*?(&|$)') if(url.search(pattern)>=0){ return url.replace(pattern,'$1' + paramValue + '$2'); } return url + (url.indexOf('?')>0 ? '&' : '?') + paramName + '=' + paramValue }
EDIT Problème corrigé où les paramètres se terminant par ParamName étaient correspondants. Ajout de \ b pour la limite des mots.
Limitations connues:
Voici le code modifié de Stenix, ce n'est pas parfait, mais il gère les cas où il existe un paramètre dans url qui contient un paramètre fourni, comme:
/search?searchquery=text and 'query' is provided.
Dans ce cas, la valeur du paramètre searchquery est modifiée.
Code:
function replaceUrlParam(url, paramName, paramValue){ var pattern = new RegExp('(\\?|\\&)('+paramName+'=).*?(&|$)') var newUrl=url if(url.search(pattern)>=0){ newUrl = url.replace(pattern,'$1$2' + paramValue + '$3'); } else{ newUrl = newUrl + (newUrl.indexOf('?')>0 ? '&' : '?') + paramName + '=' + paramValue } return newUrl }
UpdatE: Faites-en une bonne fonction: 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; }
Ensuite, allez-y!
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);
Si vous regardez de près, vous verrez deux choses surprenantes sur les URL: (1) elles semblent simples, mais les détails et les cas d'angle sont réellement difficiles, (2) Incroyablement JavaScript ne fournit pas une API complète pour faciliter le travail avec eux . Je pense qu'une librairie à part entière est afin d'éviter que les personnes ne réinventent la roue elles-mêmes ou copient l'extrait de code de regex intelligent, mais probablement buggy. Peut-être essayez URI.js ( http://medialize.github.io/URI.js/ )
En plus de @stenix, cela m'a parfaitement fonctionné
url = window.location.href; paramName = 'myparam'; paramValue = $(this).val(); var pattern = new RegExp('('+paramName+'=).*?(&|$)') var newUrl = url.replace(pattern,'$1' + paramValue + '$2'); var n=url.indexOf(paramName); alert(n) if(n == -1){ newUrl = newUrl + (newUrl.indexOf('?')>0 ? '&' : '?') + paramName + '=' + paramValue } window.location.href = newUrl;
Ici, il n'est pas nécessaire d'enregistrer la variable "url", il suffit de remplacer dans l'URL en cours
Que diriez-vous quelque chose comme ça:
<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>