Existe-t-il un meilleur moyen de supprimer un paramètre d'une chaîne de requête dans une chaîne d'URL en JavaScript standard autrement qu'en utilisant une expression régulière?
Voici ce que j'ai trouvé jusqu'à présent et qui semble fonctionner dans mes tests, mais je n'aime pas réinventer l'analyse des chaînes de requêtes!
function RemoveParameterFromUrl( url, parameter ) {
if( typeof parameter == "undefined" || parameter == null || parameter == "" ) throw new Error( "parameter is required" );
url = url.replace( new RegExp( "\\b" + parameter + "=[^&;]+[&;]?", "gi" ), "" ); "$1" );
// remove any leftover crud
url = url.replace( /[&;]$/, "" );
return url;
}
javascript
query-string
Matthew Lock
la source
la source
url= urlparts[0]+'?'+pars.join('&');
enurl= urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : "");
Les navigateurs modernes fournissent une
URLSearchParams
interface pour travailler avec les paramètres de recherche. Qui a unedelete
méthode qui supprime le paramètre par son nom.la source
URLSearchParams
n'est pas pris en charge par IE, Edge 16 et iOS 10.2 Safari. (ref: caniuse.com/#feat=urlsearchparams )Copié à partir de la réponse bobince, mais l'a fait prendre en charge les points d'interrogation dans la chaîne de requête, par exemple
http://www.google.com/search?q=test???+something&aq=f
Est-il valide d'avoir plus d'un point d'interrogation dans une URL?
la source
???
syntaxe est invalide et ne devrait jamais apparaître dans une URL.return url.endsWith("?") ? url.slice(0,-1) : url;
pour couvrir le cas où le paramètre à supprimer est le seul dans la chaîne de requêteJe ne vois pas de problèmes majeurs avec une solution regex. Mais n'oubliez pas de conserver l'identifiant du fragment (texte après le
#
).Voici ma solution:
Et pour revenir au sujet de Bobince, oui - vous auriez besoin d'échapper des
.
caractères dans les noms de paramètres.la source
url.replace(new RegExp('^([^#]*\?)(([^#]*)&)?' + parameter + '(\=[^&#]*)?(&|#|$)' ), '$1$3$5').replace(/^([^#]*)((\?)&|\?(#|$))/,'$1$3$4')
Vous pouvez modifier l'URL avec:
de cette façon, vous pouvez écraser l'URL sans le paramètre de recherche, je l'utilise pour nettoyer l'URL après avoir pris les paramètres GET.
la source
Toute personne intéressée par une solution regex J'ai mis en place cette fonction pour ajouter / supprimer / mettre à jour un paramètre de chaîne de requête. 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 extraite de window.location. Cette solution prend également en compte l'ancre de l'URL.
METTRE À JOUR
Il y avait un bogue lors de la suppression du premier paramètre de la chaîne de requête, j'ai retravaillé l'expression régulière et testé pour inclure un correctif.
MISE À JOUR 2
Mise à jour @schellmax pour corriger la situation où le symbole du hashtag est perdu lors de la suppression d'une variable de chaîne de requête directement avant un hashtag
la source
UpdateQueryString('a', null, 'http://www.test.com?a=b#c');
url
pour chaque itération de remplacement. Mais cela signifie que vous devez entrer avalue
dans les arguments, ce qui laissera la chaîne de requête à moitié supprimée. Pour contrer cela, utilisezundefined
ounull
pour unvalue
argument comme:url_from_last_iteration = UpdateQueryString(current_ignore_key, undefined/null, url_from_last_iteration);
En supposant que vous souhaitiez supprimer le paramètre key = val de l'URI:
la source
/([&?]key=val*$|key=val&|[?&]key=val(?=#))/
peut être préférable lors de l'utilisation d'un linter comme eslintVoici ce que j'utilise:
URL d'origine: http://www.example.com/test/hello?id=123&foo=bar
URL de destination: http://www.example.com/test/hello
la source
Voici une fonction complète pour ajouter et supprimer des paramètres en fonction de cette question et de ce github gist: https://gist.github.com/excalq/2961415
Vous pouvez ajouter des paramètres comme celui-ci:
Et supprimez-le comme ceci:
Dans ce fil, beaucoup ont dit que le regex n'est probablement pas la meilleure solution / stable ... donc je ne suis pas sûr à 100% si cette chose a des défauts, mais pour autant que je l'ai testé, cela fonctionne assez bien.
la source
Il s'agit d'un paramètre de requête de suppression de version propre avec la classe URL pour les navigateurs d'aujourd'hui:
URLSearchParams non pris en charge sur les anciens navigateurs
https://caniuse.com/#feat=urlsearchparams
IE, Edge (inférieur à 17) et Safari (inférieur à 10.3) ne prennent pas en charge URLSearchParams dans la classe URL.
Polyfills
URLSearchParams uniquement polyfill
https://github.com/WebReflection/url-search-params
Complétez les URL Polyfill et URLSearchParams pour correspondre aux dernières spécifications WHATWG
https://github.com/lifaon74/url-polyfill
la source
Utilisation de jQuery:
la source
La version ci-dessus en fonction
la source
Vous devriez utiliser une bibliothèque pour faire la manipulation d'URI car il est plus compliqué qu'il n'y paraît à première vue de le faire vous-même. Jetez un œil à: http://medialize.github.io/URI.js/
la source
D'après ce que je peux voir, aucun des éléments ci-dessus ne peut gérer les paramètres normaux et les paramètres de tableau. En voici un qui le fait.
Comment l'utiliser:
Bien sûr, pour mettre à jour un paramètre, il suffit de supprimer puis d'ajouter. N'hésitez pas à en faire une fonction factice.
la source
path.replace(new RegExp("&?"+param+"=[\\w]+", "g"), "");
Je changerais l'expression régulière pour[\\w]*
inclure des paramètres comme "param =" sans valeurs.Toutes les réponses de ce fil ont un défaut en ce qu'elles ne préservent pas les parties d'ancrage / fragment des URL.
Donc, si votre URL ressemble à:
et vous remplacez 'paramètre'
vous perdrez votre texte fragmenté.
Ce qui suit est une adaptation des réponses précédentes (bobince via LukePH) qui résout ce problème:
la source
url = urlBase+'?'+pars.join('&');
enurl = urlBase + (pars.length > 0 ? '?' + pars.join('&') : "");
Voici une solution qui:
?
dans la chaîne de requête si le dernier paramètre a été suppriméRemarque: comme indiqué dans d'autres réponses, URLSearchParams n'est pas pris en charge dans IE , utilisez donc un polyfill .
la source
S'il s'agit d'une instance de
URL
, utilisez ladelete
fonction desearchParams
la source
une autre réponse directe et plus simple serait
la source
Une version modifiée de la solution par ssh_imov
Appelez comme ça
la source
Cela renvoie l'URL sans aucun paramètre GET:
la source
J'ai pratiquement écrit la fonction suivante pour traiter les paramètres d'url et obtenir le statut final sous forme de chaîne et rediriger la page. Espérons que cela en profite.
Par exemple, lorsque je clique sur un bouton, je veux que la valeur de la page soit supprimée et que la valeur de la catégorie soit ajoutée.
Je pense que c'était très utile!
la source
Heureux que vous ayez fait défiler ici.
Je vous suggère de résoudre cette tâche par les prochaines solutions possibles:
http://google.com/?myparm
http://google.com/?myparm=1
http://google.com?qp=1&qpqp=2&qp=1
for
boucle et ne modifie pas le tableau pendant le bouclage dessusFonctionne dans IE> 9 (version ES5)
Version fantaisie ES6
Découvrez comment cela fonctionne ici
la source
la source
la source
Si vous aimez jQuery, il existe un bon plugin de manipulation de chaînes de requête:
la source
la source