Frage

Ich bin auf der Suche nach einer jQuery-Plugin, die URL-Parameter zu bekommen, und diese Suche Zeichenfolge unterstützen, ohne den JavaScript-Fehler ausgibt: „URI-Sequenz malformed“. Wenn es nicht eine jQuery-Plugin ist, die das unterstützt, muß ich wissen, wie es zu ändern, dies zu unterstützen.

?search=%E6%F8%E5

Der Wert des URL-Parameters, wenn decodiert, sollte sein:

æøå

(die Zeichen sind norwegisch).

Ich habe keinen Zugriff auf den Server, so kann ich nicht alles auf sie ändern.

War es hilfreich?

Lösung 10

Sie sollten verwenden jQuery für so etwas wie nicht!
Die moderne Art und Weise ist klein wiederverwendbare Module durch einen Paket-Manager wie Bower zu verwenden.

Ich habe ein kleines Modul , der die Query-String in ein Objekt analysieren kann. Verwenden Sie es wie folgt aus:

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

Andere Tipps

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

Im Folgenden finden Sie, was ich aus den Kommentaren hier erstellt haben, sowie Fehler zu beheben nicht erwähnt (eigentlich wie Rückkehr null, und nicht ‚null‘):

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

Was Sie wirklich wollen, ist der jQuery URL Parser Plugin . Mit diesem Plugin den Wert einer bestimmten URL-Parameter bekommen (für die aktuelle URL) sieht wie folgt aus:

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

Wenn Sie ein Objekt mit Parameternamen als Schlüssel und Parameterwerte als Werte wollen, würden Sie einfach anrufen param() ohne Argument, wie folgt aus:

$.url().param();

Diese Bibliothek funktioniert auch mit anderen Urls, nicht nur die aktuelle:

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

Da dies eine ganze URL Bibliothek Parsen, können Sie auch andere Informationen aus der URL erhalten, wie die Port angegeben, oder der Pfad, Protokoll 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'

Es andere Funktionen als gut Besuche für mehr Dokumentation und Beispiele seiner Homepage .

Stattdessen Ihren eigenen URI-Parser für diesen speziellen Zweck des Schreibens, dass irgendwie arbeitet in die meisten Fälle, verwenden Sie einen aktuellen URI-Parser. Je nach Antwort, Code aus anderen Antworten 'null' statt null zurückkehren kann, nicht mit leeren Parametern (?foo=&bar=x) funktioniert, können alle Parameter auf einmal nicht analysieren und zurück, wiederholt die Arbeit, wenn Sie wiederholt die URL-Parameter abfragen usw. .

Verwenden tatsächlichen einen URI-Parser, keine eigene erfinden.

Für jene abgeneigt jQuery gibt es eine Version des Plug-ins, die reine ist JS .

Wenn Sie nicht wissen, was die URL-Parameter sein und wollen ein Objekt mit den Tasten und Werte erhalten, die in den Parametern sind, können Sie diese verwenden:

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

getParameters Calling () mit einer URL wie /posts?date=9/10/11&author=nilbus zurückkehren würde:

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

Ich werde den Code nicht hier bin, da es noch weiter weg von der Frage, aber weareon.net eine Bibliothek geschrieben, die Manipulation der Parameter in der URL erlaubt auch:

Sie können den Browser nativen verwenden location.search Eigenschaft:

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

Aber es gibt einige jQuery-Plugins, die Ihnen helfen können:

Auf der Grundlage der 999 Antwort :

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

Änderungen:

  • decodeURI() mit decodeURIComponent() ersetzt
  • [?|&] wird zu Beginn des regexp hinzugefügt

Sie möchten die i-Parameter hinzufügen, um es Groß- und Kleinschreibung:

  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");

Zum Beispiel wird eine Funktion, die Parameter Wert jeder Variable gibt.

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];
        }
    }
}​

Und das ist, wie Sie mit dieser Funktion können die URL unter der Annahme ist,

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

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

So in obigem Code Variable "tech" wird "jQuery" als Wert hat und "Blog" Variable wird "jquerybyexample".

Nachdem alle Antworten zu lesen ich mit dieser Version mit + einer zweiten Funktion endete Parameter als Flags verwenden

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

Es gibt eine Menge von fehlerhaftem Code hier und regex Lösungen sind sehr langsam. Ich fand eine Lösung, die zu 20x schneller als der regex Pendant funktioniert und ist elegant einfach:

    /*
    *   @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 ist nicht das A und O Lösung für diese Art von Problem einfachen String-Manipulation kann effizienter eine riesige Menge Arbeit. -Code Quelle .

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

</script>

getURLParameter(id) oder getURLParameter(Id) Funktioniert gleich:)

jQuery-Code-Schnipsel, die dynamischen Variablen in der URL als Parameter gespeichert zu erhalten und sich als JavaScript-Variablen bereit für die Verwendung mit Ihrer Skripts:

$.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";
    }

}

Ich habe eine einfache Funktion URL-Parameter in JavaScript von einer URL wie folgt zu erhalten:

.....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

Für den Fall, Sie Jungs haben die URL wie localhost / index.xsp? A = 1 # etwas und Sie müssen die param nicht den Hash erhalten.

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];
    }
}

Leichte Änderung der Antwort von @pauloppenheim, da es nicht richtig Parameternamen behandelt, die ein Teil von anderen Parameternamen sein kann.

. ZB: Wenn Sie "appenv" & "env" Parameter, redeaing den Wert für "env" "appenv" Wert haben Pick-up kann

Fix:

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

Dies kann helfen.

<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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top