J'ai étendu le code de Sujoy pour créer une fonction.
/**
* http://stackoverflow.com/a/10997390/11236
*/
function updateURLParameter(url, param, paramVal){
var newAdditionalURL = "";
var tempArray = url.split("?");
var baseURL = tempArray[0];
var additionalURL = tempArray[1];
var temp = "";
if (additionalURL) {
tempArray = additionalURL.split("&");
for (var i=0; i<tempArray.length; i++){
if(tempArray[i].split('=')[0] != param){
newAdditionalURL += temp + tempArray[i];
temp = "&";
}
}
}
var rows_txt = temp + "" + param + "=" + paramVal;
return baseURL + "?" + newAdditionalURL + rows_txt;
}
Appels de fonction :
var newURL = updateURLParameter(window.location.href, 'locId', 'newLoc');
newURL = updateURLParameter(newURL, 'resId', 'newResId');
window.history.replaceState('', '', updateURLParameter(window.location.href, "param", "value"));
Version mise à jour qui prend également en charge les ancres sur l'URL.
function updateURLParameter(url, param, paramVal)
{
var TheAnchor = null;
var newAdditionalURL = "";
var tempArray = url.split("?");
var baseURL = tempArray[0];
var additionalURL = tempArray[1];
var temp = "";
if (additionalURL)
{
var tmpAnchor = additionalURL.split("#");
var TheParams = tmpAnchor[0];
TheAnchor = tmpAnchor[1];
if(TheAnchor)
additionalURL = TheParams;
tempArray = additionalURL.split("&");
for (var i=0; i<tempArray.length; i++)
{
if(tempArray[i].split('=')[0] != param)
{
newAdditionalURL += temp + tempArray[i];
temp = "&";
}
}
}
else
{
var tmpAnchor = baseURL.split("#");
var TheParams = tmpAnchor[0];
TheAnchor = tmpAnchor[1];
if(TheParams)
baseURL = TheParams;
}
if(TheAnchor)
paramVal += "#" + TheAnchor;
var rows_txt = temp + "" + param + "=" + paramVal;
return baseURL + "?" + newAdditionalURL + rows_txt;
}
2 votes
Une réponse légère, sans plugin : stackoverflow.com/a/10997390/11236
11 votes
Je ne peux pas croire que nous sommes en 2013 et qu'il n'y a pas une meilleure façon de le faire, comme quelque chose d'intégré dans les bibliothèques de base du navigateur.
0 votes
Voir ma réponse pour une solution moderne : stackoverflow.com/a/19965480/64949
0 votes
Duplicata possible de encodage de la chaîne de requête d'un objet javascript
6 votes
@TylerCollier mi-2015 maintenant et toujours rien :(
0 votes
Déjà 3ème trimestre 2016, Se demander comment Google Maps le fait réellement, avoir besoin de cette fonctionnalité pour le bookmarking.
4 votes
Il semble que nous y arrivions... developer.mozilla.org/fr/US/docs/Web/API/URLSearchParams/
0 votes
stackoverflow.com/a/63302942/863110 est la réponse maintenant (si vous ne vous souciez pas d'IE)
10 votes
@TylerCollier c'est 2021 maintenant et nous avons finalement obtenu ceci :)
const myUrl = new URL("http://www.example.com?columns=5&rows=20");
myUrl.searchParams.set('rows', 10);
myUrl.href
contiendra l'URL mise à jour2 votes
Sur la base du commentaire de @sprutex, vous pouvez remplacer
http://www.example.com?columns=5&rows=20
conwindow.location.href
pour rendre le code plus dynamique