web-dev-qa-db-fra.com

jquery obtient la chaîne de requête depuis l'URL

Duplicate possible:
Comment puis-je obtenir les valeurs d'une chaîne de requête?

J'ai l'URL suivante:

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

Ce dont j'ai besoin, c'est d'extraire la valeur de location de l'URL dans une variable, puis de l'utiliser dans un code jQuery:

var thequerystring = "getthequerystringhere"

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

Est-ce que quelqu'un sait comment saisir cette valeur en utilisant JavaScript ou jQuery?

255
Tom

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

C'est ce dont tu as besoin :)

Le code suivant renverra un objet JavaScript contenant les paramètres d'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 retournera:

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

et vous pouvez faire:

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

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

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 chaîne de requête spécifiques, bien que des classes telles que URLSearchParams et URL existent, elles ne sont pas actuellement prises en charge par Internet Explorer et devraient probablement être évitées. Au lieu de cela, 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 ceci:

// 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);
}

160
Yene Mulatu

Un moyen facile de faire cela avec quelques jQuery et straight JS, affichez simplement 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);
26
James

Jetez un oeil à ceci réponse stackoverflow .

 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 la méthode pour animer:

c'est à dire:

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

On fait comme ça ...

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(/(&|;|$)/))) : "";
};
1