Obtenir les valeurs de la chaîne (string) d'une requête en JavaScript
Le langage JavaScript ne possède pas de méthodes natives pour récupérer directement les paramètres d'une URL mais il est possible d'en créer une.
Le langage JavaScript ne possède pas de méthodes natives pour récupérer directement les paramètres d'une URL mais il est possible d'en créer une. Il faut pour cela récupérer l'URL grâce à l'attribut windows.location.href puis utiliser des expressions régulières. Dans une URL, les paramètres commencent avec le caractère spécial ? pour le premier, puis & pour les paramètres suivants. Le caractère = sépare un paramètre de sa valeur.
http://www.monsite.fr/index.html?param1=valeur1¶m2= ¶m3=valeur2
On peut donc créer une fonction qui récupère l'URL puis recherche la valeur d'un paramètre avec une expression régulière :
function obtenirParametreSelonNom(nom) { //On récupère l'URL de la page url = window.location.href; //Cette expression régulière permet de décomposer un tableau afin que l'expression régulière suivante fonctionne nom = nom.replace(/[\[\]]/g, \\$&); //Expression régulière pour récupérer la valeur du paramètre var regex = new RegExp([?&] + nom + (=([^&#]*)|&|#|$)), resultats = regex.exec(url); //Gestion des cas pour un paramètre qui n'existe pas et une valeur vide if (!resultats) return null; if (!resultats[2]) return ''; //La fonction decodeURIComponent convertit les caractères encodées d'une URL dans leur forme normale return decodeURIComponent(results[2].replace(/+/g, )); }</pre> En utilisant l'URL indiquée en exemple, on obtient le résultat suivant : <pre>var resultat = obtenirParametreSelonNom ('param1'); // valeur1 var resultat = obtenirParametreSelonNom ('param2'); // (présent avec une valeur vide) var resultat = obtenirParametreSelonNom ('param4'); // null (absent)</pre>
Si vous avez besoin d'utiliser cette méthode fréquemment dans vos pages, il est préférable d'utiliser une seule fois l'expression régulière lorsque l'URL change (l'évènement onpopstate de la fenêtre détecte un changement d'URL actuelle dans l'historique, il ne faut donc pas utiliser l'API History du langage HTML5), puis de stocker les paramètres dans une variable globale :
<pre>var parametresURL; (window.onpopstate = function () { var match, pl = /+/g, // Expression régulière pour remplacer les symboles supplémentaires par des espaces recherche = /([^&=]+)=?([^&]*)/g, decode = function (s) { return decodeURIComponent(s.replace(pl, )); }, requete = window.location.search.substring(1); parametresURL = {}; while (resultat = recherche.exec(query)) parametresURL [decode(resultat[1])] = decode(resultat[2]); })();</pre> La variable parametresURL aura alors la forme suivante : <pre>parametresURL = { param1: valeur1, param2: , param3: valeur2 }</pre>