Comment remplacer le paramètre url par javascript / jquery?

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:

  • Le paramètre n'existe pas dans l'URL d'origine
  • Le paramètre est le seul paramètre
  • Le paramètre est le premier ou le dernier
  • La nouvelle valeur du paramètre est identique à l'ancienne

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:

  • Ne nettoie pas un paramètre en définissant paramValue à null, mais il le définit comme une chaîne vide.
  • Il ne fonctionnera pas pour une URL se terminant par un point d'interrogation uniquement.

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>