173 votes

jQuery Obtenir des Paramètres de Chaîne de Requête

Quelqu'un connais un bon moyen d'écrire une Extension jQuery pour gérer les paramètres de chaîne de requête?

Fondamentalement, je veux étendre le jQuery magie ($) fonction afin que je puisse faire quelque chose comme cela.

$('?search').val(); 

Qui pourrait me donner la valeur "test" dans l'URL suivante

http://www.mysite.com/index.php?search=test

J'ai vu beaucoup de fonctions qui peuvent le faire en jQuery et Javascript, mais j'ai vraiment envie de prolonger jquery pour fonctionner exactement comme il est indiqué ci-dessus.

Je ne suis pas à la recherche d'un plugin jQuery, je suis à la recherche d'une extension de la méthode jQuery.

110voto

gilly3 Points 33285

Pourquoi prolonger jQuery? Quels seraient les avantages de l'extension de jQuery vs avoir juste une fonction globale?

function qs(key) {
    key = key.replace(/[*+?^$.\[\]{}()|\\\/]/g, "\\$&"); // escape RegEx meta chars
    var match = location.search.match(new RegExp("[?&]"+key+"=([^&]+)(&|$)"));
    return match && decodeURIComponent(match[1].replace(/\+/g, " "));
}

http://jsfiddle.net/gilly3/sgxcL/

Une approche alternative consisterait à analyser l'ensemble de la chaîne de requête et de stocker les valeurs dans un objet pour l'utiliser plus tard. Cette approche ne nécessite pas une expression régulière, et étend l' window.location objet (mais qui pourrait tout aussi bien utiliser une variable globale):

location.queryString = {};
location.search.substr(1).split("&").forEach(function (pair) {
    if (pair === "") return;
    var parts = pair.split("=");
    location.queryString[parts[0]] = parts[1] &&
        decodeURIComponent(parts[1].replace(/\+/g, " "));
});

http://jsfiddle.net/gilly3/YnCeu/

Cette version permet également l'utilisation de Array.forEach(), ce qui n'est pas disponible nativement dans IE7 et IE8. Il peut être ajouté à l'aide de la mise en œuvre au MDN, ou vous pouvez utiliser du jQuery $.each() à la place.

95voto

RameshVel Points 24472

JQuery jQuery-URL-Analyseur plugin faire le même travail, par exemple pour récupérer la valeur de la recherche de chaîne de requête de paramètre, vous pouvez utiliser

$.url().param('search');

47voto

Rob Nield Points 166

Ce n'est pas mon exemple de code, mais je l'ai utilisé dans le passé.

//First Add this to extend jQuery

    $.extend({
      getUrlVars: function(){
        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;
      },
      getUrlVar: function(name){
        return $.getUrlVars()[name];
      }
    });

    //Second call with this:
    // Get object of URL parameters
    var allVars = $.getUrlVars();

    // Getting URL var by its nam
    var byName = $.getUrlVar('name');

15voto

Plippie Points 1238

J'ai écrit une petite fonction où vous n'avez qu'à analyser le nom du paramètre de requête. Donc, si vous avez: ?Projet=12&Mode=200&date=2013-05-27 et vous souhaitez le 'Mode' le paramètre que vous n'avez qu'à analyser la "Mode" du nom de la fonction:

var ModeString =  getParameterByName('Mode');

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

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