Disons que j'ai une URL telle que:
http://www.example.com/hello.png?w=100&h=100&bg=white
Ce que j'aimerais faire, c'est mettre à jour les valeurs des chaînes de requête w et h, tout en laissant la chaîne de requête bg intacte, par exemple:
http://www.example.com/hello.png?w=200&h=200&bg=white
Alors, quel est le moyen le plus rapide et le plus efficace de lire les valeurs de chaîne de requête (et ce peut être n’importe quel jeu de valeurs de chaîne de requête, pas seulement w, h et bg), de mettre à jour quelques valeurs ou aucune chaîne de requête?
Alors:
Récupère les valeurs de chaîne de requête this way et utilise $ .param pour reconstruire la chaîne de requête
METTRE À JOUR:
Ceci est un exemple, vérifiez également fiddle :
function getQueryVariable(url, variable) {
var query = url.substring(1);
var vars = query.split('&');
for (var i=0; i<vars.length; i++) {
var pair = vars[i].split('=');
if (pair[0] == variable) {
return pair[1];
}
}
return false;
}
var url = 'http://www.example.com/hello.png?w=100&h=100&bg=white';
var w = getQueryVariable(url, 'w');
var h = getQueryVariable(url, 'h');
var bg = getQueryVariable(url, 'bg');
// http://www.example.com/hello.png?w=200&h=200&bg=white
var params = { 'w':200, 'h':200, 'bg':bg };
var new_url = 'http://www.example.com/hello.png?' + jQuery.param(params);
Vous pouvez changer la fonction pour utiliser l'URL actuelle:
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split('&');
for (var i=0; i<vars.length; i++) {
var pair = vars[i].split('=');
if (pair[0] == variable) {
return pair[1];
}
}
return false;
}
Autre moyen (indépendant de jQuery ou d’autres bibliothèques): https://github.com/Mikhus/jsurl
var u = new Url;
// or
var u = new Url('/some/path?foo=baz');
alert(u);
u.query.foo = 'bar';
alert(u);
//update URL Parameter
function updateURL(key,val){
var url = window.location.href;
var reExp = new RegExp("[\?|\&]"+key + "=[0-9a-zA-Z\_\+\-\|\.\,\;]*");
if(reExp.test(url)) {
// update
var reExp = new RegExp("[\?&]" + key + "=([^&#]*)");
var delimiter = reExp.exec(url)[0].charAt(0);
url = url.replace(reExp, delimiter + key + "=" + val);
} else {
// add
var newParam = key + "=" + val;
if(!url.indexOf('?')){url += '?';}
if(url.indexOf('#') > -1){
var urlparts = url.split('#');
url = urlparts[0] + "&" + newParam + (urlparts[1] ? "#" +urlparts[1] : '');
} else {
url += "&" + newParam;
}
}
window.history.pushState(null, document.title, url);
}
Solution simple
Vous pouvez utiliser URLSearchParams.set () comme ci-dessous:
var currentUrl = 'http://www.example.com/hello.png?w=100&h=100&bg=white';
var url = new URL(currentUrl);
url.searchParams.set("w", "200"); // setting your param
var newUrl = url.href;
console.log(newUrl);
Mon URL est comme ceci: http: // localhost/dentistryindia/admin/hospital/add_procedure? Hid = 241 & hpr_id = 12
var reExp = /hpr_id=\\d+/;
var url = window.location.href;
url = url.toString();
var hrpid = $("#category :selected").val(); //new value to replace hpr_id
var reExp = new RegExp("[\\?&]" + 'hpr_id' + "=([^&#]*)"),
delimeter = reExp.exec(url)[0].charAt(0),
newUrl = url.replace(reExp, delimeter + 'hpr_id' + "=" + hrpid);
window.location.href = newUrl;
Voilà comment cela a fonctionné pour moi.
Vous pouvez faire quelque chose comme ça:
// If key exists updates the value
if (location.href.indexOf('key=') > -1) {
location.href = location.href.replace('key=current_val', 'key=new_val');
// If not, append
} else {
location.href = location.href + '&key=new_val';
}
Cordialement
Une autre façon de faire cela, en utilisant un simple code reg ex de Samuel Santos ici comme ceci:
/*
* queryParameters -> handles the query string parameters
* queryString -> the query string without the fist '?' character
* re -> the regular expression
* m -> holds the string matching the regular expression
*/
var queryParameters = {}, queryString = location.search.substring(1),
re = /([^&=]+)=([^&]*)/g, m;
// Creates a map with the query string parameters
while (m = re.exec(queryString)) {
queryParameters[decodeURIComponent(m[1])] = decodeURIComponent(m[2]);
}
// Update w and h
queryParameters['w'] = 200;
queryParameters['h'] = 200;
Maintenant, vous pouvez soit créer une nouvelle URL:
var url = window.location.protocol + '//' + window.location.hostname + window.location.pathname;
// Build new Query String
var params = $.param(queryParameters);
if (params != '') {
url = url + '?' + params;
}
OU vous pouvez simplement utiliser les paramètres pour provoquer le rechargement immédiat du navigateur:
location.search = params;
OU faites ce que vous voulez avec :)
J'aime la réponse d'Ali le meilleur. J'ai nettoyé le code en une fonction et j'ai pensé le partager pour faciliter la vie de quelqu'un d'autre. J'espère que ça aide quelqu'un.
function addParam(currentUrl,key,val) {
var url = new URL(currentUrl);
url.searchParams.set(key, val);
return url.href;
}