Question

Je recherche un plug-in jQuery capable de récupérer les paramètres d'URL et de prendre en charge cette chaîne de recherche sans générer d'erreur JavaScript: "séquence d'URI mal formée". S'il n'y a pas de plugin jQuery qui supporte cela, j'ai besoin de savoir comment le modifier pour le faire.

?search=%E6%F8%E5

La valeur du paramètre d'URL, une fois décodé, doit être:

æøå

(les caractères sont norvégiens).

Je n'ai pas accès au serveur, je ne peux donc rien y modifier.

Était-ce utile?

La solution 10

Vous ne devez pas utiliser jQuery pour quelque chose comme ça!
La méthode moderne consiste à utiliser de petits modules réutilisables via un gestionnaire de paquets comme Bower.

J'ai créé un minuscule module qui peut analyser la chaîne de requête dans un objet. Utilisez-le comme ceci:

// parse the query string into an object and get the property
queryString.parse(unescape(location.search)).search;
//=> æøå

Autres conseils

function getURLParameter(name) {
    return decodeURI(
        (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
    );
}

Ci-dessous, voici ce que j'ai créé à partir des commentaires ici, ainsi que la correction des bogues non mentionnés (tels que le renvoi de null, et non de "null"):

function getURLParameter(name) {
    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}

Ce que vous voulez vraiment, c'est le plug-in jQuery URL Parser . Avec ce plugin, obtenir la valeur d’un paramètre d’URL spécifique (pour l’URL actuelle) ressemble à ceci:

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

Si vous voulez un objet avec les noms de paramètres sous forme de clés et les valeurs de paramètres sous forme de valeurs, appelez simplement param () sans argument, comme ceci:

$.url().param();

Cette bibliothèque fonctionne également avec d'autres URL, pas seulement avec celle en cours:

$.url('http://allmarkedup.com?sky=blue&grass=green').param();
$('#myElement').url().param(); // works with elements that have 'src', 'href' or 'action' attributes

S'agissant d'une bibliothèque d'analyse complète d'URL, vous pouvez également obtenir d'autres informations à partir de l'URL, telles que le port spécifié, le chemin, le protocole, etc.:

var url = $.url('http://allmarkedup.com/folder/dir/index.html?item=value');
url.attr('protocol'); // returns 'http'
url.attr('path'); // returns '/folder/dir/index.html'

Elle comporte également d'autres fonctionnalités, consultez sa page d'accueil pour plus de documents et d'exemples.

Au lieu d’écrire votre propre analyseur d’URI dans un but spécifique qui kinda fonctionne dans la plupart des cas, utilisez un analyseur d’URI réel. En fonction de la réponse, le code provenant d'autres réponses peut renvoyer 'null' au lieu de null , ne fonctionne pas avec des paramètres vides (? Foo = & amp; bar = x ), impossible d'analyser et de renvoyer tous les paramètres en même temps, répète le travail si vous interrogez plusieurs fois l'URL de paramètres, etc.

Utilisez un analyseur URI réel, n'inventez pas le vôtre.

Pour ceux qui sont opposés à jQuery, il existe une version du plug-in purement JS . .

Si vous ne connaissez pas les paramètres d'URL et souhaitez obtenir un objet avec les clés et les valeurs contenues dans les paramètres, vous pouvez utiliser ceci:

function getParameters() {
  var searchString = window.location.search.substring(1),
      params = searchString.split("&"),
      hash = {};

  if (searchString == "") return {};
  for (var i = 0; i < params.length; i++) {
    var val = params[i].split("=");
    hash[unescape(val[0])] = unescape(val[1]);
  }
  return hash;
}

L'appel de getParameters () avec une URL du type / posts? date = 9/10/11 / author = nilbus renverrait:

{
  date:   '9/10/11',
  author: 'nilbus'
}

Je n'inclurai pas le code ici car il est encore plus éloigné de la question, mais weareon.net a posté une bibliothèque qui permet également de manipuler les paramètres de l'URL:

Vous pouvez utiliser la propriété location.search native du navigateur:

function getParameter(paramName) {
  var searchString = window.location.search.substring(1),
      i, val, params = searchString.split("&");

  for (i=0;i<params.length;i++) {
    val = params[i].split("=");
    if (val[0] == paramName) {
      return unescape(val[1]);
    }
  }
  return null;
}

Mais il existe des plugins jQuery qui peuvent vous aider:

Basé sur la réponse de 999 :

function getURLParameter(name) {
    return decodeURIComponent(
        (location.search.match(RegExp("[?|&]"+name+'=(.+?)(&|$)'))||[,null])[1]
    );  
}

Modifications:

  • decodeURI () est remplacé par decodeURIComponent ()
  • [? | & amp;] est ajouté au début de l'expression rationnelle

Besoin d'ajouter le paramètre i pour le rendre insensible à la casse:

  function getURLParameter(name) {
    return decodeURIComponent(
      (RegExp(name + '=' + '(.+?)(&|$)', 'i').exec(location.search) || [, ""])[1]
    );
  }
$.urlParam = function(name){
  var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(top.window.location.href); 
  return (results !== null) ? results[1] : 0;
}

$.urlParam("key");

Par exemple, une fonction qui renvoie la valeur de toute variable de paramètre.

function GetURLParameter(sParam)
{
    var sPageURL = window.location.search.substring(1);
    var sURLVariables = sPageURL.split('&');
    for (var i = 0; i < sURLVariables.length; i++)
    {
        var sParameterName = sURLVariables[i].split('=');
        if (sParameterName[0] == sParam)
        {
            return sParameterName[1];
        }
    }
}​

Et voici comment utiliser cette fonction en supposant que l'URL est

.

& http; //example.com/? technology = jquery & blog = jquerybyexample &

var tech = GetURLParameter('technology');
var blog = GetURLParameter('blog');

Donc, dans la variable de code ci-dessus " tech " aura " jQuery " comme valeur et " blog " la variable sera "jquerybyexample".

Après avoir lu toutes les réponses, je me suis retrouvé avec cette version avec + une deuxième fonction pour utiliser les paramètres comme indicateurs

function getURLParameter(name) {
    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)','i').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}

function isSetURLParameter(name) {
    return (new RegExp('[?|&]' + name + '(?:[=|&|#|;|]|$)','i').exec(location.search) !== null)
}

Il y a beaucoup de code buggy ici et les solutions de regex sont très lentes. J'ai trouvé une solution qui fonctionne jusqu'à 20 fois plus vite que son homologue regex et d'une simplicité élégante:

    /*
    *   @param      string      parameter to return the value of.
    *   @return     string      value of chosen parameter, if found.
    */
    function get_param(return_this)
    {
        return_this = return_this.replace(/\?/ig, "").replace(/=/ig, ""); // Globally replace illegal chars.

        var url = window.location.href;                                   // Get the URL.
        var parameters = url.substring(url.indexOf("?") + 1).split("&");  // Split by "param=value".
        var params = [];                                                  // Array to store individual values.

        for(var i = 0; i < parameters.length; i++)
            if(parameters[i].search(return_this + "=") != -1)
                return parameters[i].substring(parameters[i].indexOf("=") + 1).split("+");

        return "Parameter not found";
    }

console.log(get_param("parameterName"));

Regex n’est pas la solution idéale, pour ce type de problème, une simple manipulation de chaîne peut fonctionner énormément plus efficacement. code source .

<script type="text/javascript">
function getURLParameter(name) {
        return decodeURIComponent(
            (location.search.toLowerCase().match(RegExp("[?|&]" + name + '=(.+?)(&|$)')) || [, null])[1]
        );
    }

</script>

getURLParameter (id) ou getURLParameter (Id) fonctionne de la même manière:)

Extrait de code jQuery pour obtenir les variables dynamiques stockées dans l'URL en tant que paramètres et les stocker en tant que variables JavaScript prêtes à être utilisées avec vos scripts:

$.urlParam = function(name){
    var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
    if (results==null){
       return null;
    }
    else{
       return results[1] || 0;
    }
}

example.com?param1=name&param2=&id=6

$.urlParam('param1'); // name
$.urlParam('id');        // 6
$.urlParam('param2');   // null

//example params with spaces
http://www.jquery4u.com?city=Gold Coast
console.log($.urlParam('city'));  
//output: Gold%20Coast

console.log(decodeURIComponent($.urlParam('city'))); 
//output: Gold Coast
function getURLParameters(paramName) 
{
        var sURL = window.document.URL.toString();  
    if (sURL.indexOf("?") > 0)
    {
       var arrParams = sURL.split("?");         
       var arrURLParams = arrParams[1].split("&");      
       var arrParamNames = new Array(arrURLParams.length);
       var arrParamValues = new Array(arrURLParams.length);     
       var i = 0;
       for (i=0;i<arrURLParams.length;i++)
       {
        var sParam =  arrURLParams[i].split("=");
        arrParamNames[i] = sParam[0];
        if (sParam[1] != "")
            arrParamValues[i] = unescape(sParam[1]);
        else
            arrParamValues[i] = "No Value";
       }

       for (i=0;i<arrURLParams.length;i++)
       {
                if(arrParamNames[i] == paramName){
            //alert("Param:"+arrParamValues[i]);
                return arrParamValues[i];
             }
       }
       return "No Parameters Found";
    }

}

J'ai créé une fonction simple pour obtenir le paramètre d'URL en JavaScript à partir d'une URL comme celle-ci:

.....58e/web/viewer.html?page=*17*&getinfo=33


function buildLinkb(param) {
    var val = document.URL;
    var url = val.substr(val.indexOf(param))  
    var n=parseInt(url.replace(param+"=",""));
    alert(n+1); 
}
buildLinkb("page");

OUTPUT: 18

Juste au cas où vous avez l'URL comme localhost / index.xsp? a = 1 # quelque chose et que vous devez obtenir le paramètre et non le hachage.

var vars = [], hash, anchor;
var q = document.URL.split('?')[1];
if(q != undefined){
    q = q.split('&');
    for(var i = 0; i < q.length; i++){
        hash = q[i].split('=');
        anchor = hash[1].split('#');
        vars.push(anchor[0]);
        vars[hash[0]] = anchor[0];
    }
}

Légère modification de la réponse par @pauloppenheim, car elle ne gérera pas correctement les noms de paramètres qui peuvent faire partie d'autres noms de paramètres.

Exemple: si vous avez " appenv " & amp; " env " paramètres, en remplaçant la valeur pour " env " peut ramasser " appenv " valeur.

Correction:

var urlParamVal = function (name) {
    var result = RegExp("(&|\\?)" + name + "=(.+?)(&|$)").exec(location.search);
    return result ? decodeURIComponent(result[2]) : "";
};

Cela peut aider.

<script type="text/javascript">
    $(document).ready(function(){
        alert(getParameterByName("third"));
    });
    function getParameterByName(name){
        var url     = document.URL,
            count   = url.indexOf(name);
            sub     = url.substring(count);
            amper   = sub.indexOf("&"); 

        if(amper == "-1"){
            var param = sub.split("=");
            return param[1];
        }else{
            var param = sub.substr(0,amper).split("=");
            return param[1];
        }

    }
</script>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top