J'ai élargi la solution et l'ai combinée avec une autre que j'ai trouvée pour remplacer/modifier/supprimer les paramètres de la chaîne de requête en fonction de la saisie des utilisateurs et en tenant compte de l'ancre des urls.
Ne pas fournir de valeur supprimera le paramètre, en fournir une ajoutera/mettra à jour le paramètre. Si aucune URL n'est fournie, elle sera récupérée à partir de window.location.
function UpdateQueryString(key, value, url) {
if (!url) url = window.location.href;
var re = new RegExp("([?&])" + key + "=.*?(&|#|$)(.*)", "gi"),
hash;
if (re.test(url)) {
if (typeof value !== 'undefined' && value !== null) {
return url.replace(re, '$1' + key + "=" + value + '$2$3');
}
else {
hash = url.split('#');
url = hash[0].replace(re, '$1$3').replace(/(&|\?)$/, '');
if (typeof hash[1] !== 'undefined' && hash[1] !== null) {
url += '#' + hash[1];
}
return url;
}
}
else {
if (typeof value !== 'undefined' && value !== null) {
var separator = url.indexOf('?') !== -1 ? '&' : '?';
hash = url.split('#');
url = hash[0] + separator + key + '=' + value;
if (typeof hash[1] !== 'undefined' && hash[1] !== null) {
url += '#' + hash[1];
}
return url;
}
else {
return url;
}
}
}
Mise à jour
Il y avait un bug lors de la suppression du premier paramètre dans la chaîne de requête, j'ai retravaillé la regex et le test pour inclure une correction.
Deuxième mise à jour
Comme suggéré par @JarónBarends - Modifier la vérification des valeurs pour qu'elles soient vérifiées par rapport à undefined et null afin de permettre la définition de valeurs 0
Troisième mise à jour
Il y avait un problème où la suppression d'une variable querystring directement avant un hashtag entraînait la perte du symbole de hashtag.
Quatrième mise à jour
Merci @rooby d'avoir signalé une optimisation regex dans le premier objet RegExp. Définir la regex initiale à ([?&]) en raison d'un problème avec l'utilisation de (\?|&) trouvé par @YonatanKarni.
Cinquième mise à jour
Suppression de la déclaration de la variable hash dans l'instruction if/else
1 votes
J'ai l'impression d'avoir écrit la fonction "parseQueryString" en JavaScript une centaine de fois au cours de ma carrière. Ce n'est pas difficile. Les points clés,
String#split
prend un deuxième paramètre pour les divisions maximales.map
sera également utile.0 votes
Ce post SO propose également de nombreuses solutions stackoverflow.com/questions/1090948/
2 votes
Certains interprètent cette question comme signifiant "comment changer l'URL dans la barre d'adresse" et d'autres "comment changer n'importe quelle variable URL".
0 votes
Duplicata possible de stackoverflow.com/questions/486896/