299 votes

Obtenir la chaîne de requête de l'URL en utilisant jQuery

J'ai l'URL suivante :

http://www.mysite.co.uk/?location=mylocation1

J'ai besoin d'obtenir la valeur de location de l'URL dans une variable et l'utiliser ensuite dans le code jQuery :

var thequerystring = "getthequerystringhere"

$('html,body').animate({scrollTop: $("div#" + thequerystring).offset().top}, 500);

Comment puis-je récupérer cette valeur en utilisant JavaScript ou jQuery ?

0 votes

2 votes

var locationValue = (new URL(location.href)).searchParams.get('location')

564voto

benhowdle89 Points 11053

De : http://jquery-howto.blogspot.com/2009/09/get-url-parameters-values-with-jquery.html

C'est ce dont vous avez besoin :)

Le code suivant renverra un objet JavaScript contenant les paramètres de l'URL :

// Read a page's GET URL variables and return them as an associative array.
function getUrlVars()
{
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }
    return vars;
}

Par exemple, si vous avez l'URL :

http://www.example.com/?me=myValue&name2=SomeOtherValue

Ce code renverra :

{
    "me"    : "myValue",
    "name2" : "SomeOtherValue"
}

et vous pouvez le faire :

var me = getUrlVars()["me"];
var name2 = getUrlVars()["name2"];

13 votes

Notez que la solution ne désencode pas les valeurs des paramètres ... et ne semble pas non plus gérer explicitement les valeurs # dans l'url ? Je suggérerais stackoverflow.com/questions/901115/ à la place, comme @Steve l'a fait

3 votes

Mauvaise réponse. ne gère pas les fragments.

5 votes

@Rory, oui : ceci : " stackoverflow.com?foo=bar#topic1 " vous donnera {"foo" : "bar#topic"}. C'est pourquoi le pauvre gars a demandé la solution d'une bibliothèque bien connue, probablement dans l'espoir de trouver une solution qui avait été testée et qui couvrait toutes les bases (je dis que c'est ce qu'il espérait trouver, pas que jQuery le fournirait nécessairement).

176voto

Yene Mulatu Points 640

Pour récupérer l'intégralité de la chaîne de requête de l'URL actuelle, en commençant par l'élément ? vous pouvez utiliser le caractère

location.search

https://developer.mozilla.org/en-US/docs/DOM/window.location

Exemple :

// URL = https://example.com?a=a%20a&b=b123
console.log(location.search); // Prints "?a=a%20a&b=b123" 

En ce qui concerne la récupération de paramètres de requête spécifiques, bien que des classes telles que URLSearchParams y URL existent, ils ne sont pas pris en charge par Internet Explorer à l'heure actuelle, et devraient probablement être évités. À la place, vous pouvez essayer quelque chose comme ceci :

/**
 * Accepts either a URL or querystring and returns an object associating 
 * each querystring parameter to its value. 
 *
 * Returns an empty object if no querystring parameters found.
 */
function getUrlParams(urlOrQueryString) {
  if ((i = urlOrQueryString.indexOf('?')) >= 0) {
    const queryString = urlOrQueryString.substring(i+1);
    if (queryString) {
      return _mapUrlParams(queryString);
    } 
  }

  return {};
}

/**
 * Helper function for `getUrlParams()`
 * Builds the querystring parameter to value object map.
 *
 * @param queryString {string} - The full querystring, without the leading '?'.
 */
function _mapUrlParams(queryString) {
  return queryString    
    .split('&') 
    .map(function(keyValueString) { return keyValueString.split('=') })
    .reduce(function(urlParams, [key, value]) {
      if (Number.isInteger(parseInt(value)) && parseInt(value) == value) {
        urlParams[key] = parseInt(value);
      } else {
        urlParams[key] = decodeURI(value);
      }
      return urlParams;
    }, {});
}

Vous pouvez utiliser ce qui précède comme suit :

// Using location.search
let urlParams = getUrlParams(location.search); // Assume location.search = "?a=1&b=2b2"
console.log(urlParams); // Prints { "a": 1, "b": "2b2" }

// Using a URL string
const url = 'https://example.com?a=A%20A&b=1';
urlParams = getUrlParams(url);
console.log(urlParams); // Prints { "a": "A A", "b": 1 }

// To check if a parameter exists, simply do:
if (urlParams.hasOwnProperty('parameterName')) { 
  console.log(urlParams.parameterName);
}

8 votes

Est-ce que c'est portable ?

3 votes

Cela ne renvoie pas la chaîne de recherche à partir d'une chaîne url. Elle renvoie uniquement la valeur de la chaîne de recherche de la barre d'adresse de la page actuelle.

0 votes

@Cheezmeister : location.search fonctionne dans Chrome, Firefox et IE10+. Il pourrait aussi fonctionner dans IE9 et moins, mais je n'en ai pas sous la main. Dwight : window.location.search renvoie la chaîne de recherche. Essayez-le sur cette page dans la console et vous verrez ?a=b&c=d .

30voto

James Points 81

Un moyen facile de le faire avec un peu de jQuery et du simple JavaScript, il suffit de consulter votre console dans Chrome ou Firefox pour voir le résultat...

  var queries = {};
  $.each(document.location.search.substr(1).split('&'),function(c,q){
    var i = q.split('=');
    queries[i[0].toString()] = i[1].toString();
  });
  console.log(queries);

2 votes

Vous voudrez peut-être supprimer + et decodeURIComponent au passage... Et utiliser window.location.search à la place

0 votes

Pratique ! Notez que si vous voulez gérer les éléments de chaîne de requête vides/nuls, vous devrez ajouter un bloc "if (i[0].length > 0)..."...

3 votes

De plus, je n'arrive pas à croire que cela a nécessité 5 lignes de javascript pour le faire. En quelle année sommes-nous ?

24voto

Steve Points 16704

Jetez un coup d'œil à ceci Réponse de Stack Overflow .

 function getParameterByName(name, url) {
     if (!url) url = window.location.href;
     name = name.replace(/[\[\]]/g, "\\$&");
     var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
         results = regex.exec(url);
     if (!results) return null;
     if (!results[2]) return '';
     return decodeURIComponent(results[2].replace(/\+/g, " "));
 }

Vous pouvez utiliser cette méthode pour animer :

C'est-à-dire :

var thequerystring = getParameterByName("location");
$('html,body').animate({scrollTop: $("div#" + thequerystring).offset().top}, 500);

0voto

Nous le faisons de cette façon...

String.prototype.getValueByKey = function (k) {
    var p = new RegExp('\\b' + k + '\\b', 'gi');
    return this.search(p) != -1 ? decodeURIComponent(this.substr(this.search(p) + k.length + 1).substr(0, this.substr(this.search(p) + k.length + 1).search(/(&|;|$)/))) : "";
};

7 votes

Je ne pense pas que les gens associent l'objet string à des valeurs de chaîne de requête.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X