415 Stimmen

Query-String in JavaScript analysieren

Ich muss die Abfragezeichenfolge www.mysite.com/default.aspx?dest=aboutus.aspx analysieren. Wie bekomme ich die Variable dest in JavaScript?

0 Stimmen

Schau dir diese Lösung an. Mit seiner Funktion müsstest du einfach nicht gup('dest') aufrufen, um den URL-Parameter dest abzurufen.

0 Stimmen

Function qs(search_for) { var query = window.location.search.substring(1); var parms = query.split('&'); for (var i = 0; i < parms.length; i++) { var pos = parms[i].indexOf('='); if (pos > 0 && search_for == parms[i].substring(0, pos)) { return parms[i].substring(pos + 1);; } } return ""; } // Verwendung: document.write(qs("isFolderLevel"));

0 Stimmen

14voto

jsdw Punkte 5216

Als Ergänzung zu meinem Kommentar zur Antwort von @bobby hier ist der Code, den ich verwenden würde:

    function parseQuery(str)
        {
        if(typeof str != "string" || str.length == 0) return {};
        var s = str.split("&");
        var s_length = s.length;
        var bit, query = {}, first, second;
        for(var i = 0; i < s_length; i++)
            {
            bit = s[i].split("=");
            first = decodeURIComponent(bit[0]);
            if(first.length == 0) continue;
            second = decodeURIComponent(bit[1]);
            if(typeof query[first] == "undefined") query[first] = second;
            else if(query[first] instanceof Array) query[first].push(second);
            else query[first] = [query[first], second]; 
            }
        return query;
        }

Dieser Code nimmt die bereitgestellte Abfragezeichenfolge (als 'str') entgegen und gibt ein Objekt zurück. Die Zeichenfolge wird an allen Vorkommen von & aufgeteilt, was zu einem Array führt. Das Array wird dann durchlaufen und jedes Element wird mit "=" aufgeteilt. Dies führt zu Unterrays, wobei das 0. Element der Parameter und das 1. Element der Wert ist (oder undefiniert, wenn kein = Zeichen vorhanden ist). Diese werden den Objekteigenschaften zugeordnet, so dass beispielsweise die Zeichenfolge "hello=1&another=2&something" in Folgendes umgewandelt wird:

{
hello: "1",
another: "2",
something: undefined
}

Darüber hinaus erkennt dieser Code wiederkehrende Vorkommnisse wie "hello=1&hello=2" und wandelt das Ergebnis in ein Array um, z. B.:

{
hello: ["1", "2"]
}

Sie werden auch feststellen, dass er Fälle behandelt, in denen das = Zeichen nicht verwendet wird. Er ignoriert auch, wenn direkt nach einem & Symbol ein Gleichheitszeichen steht.

Ein bisschen übertrieben für die ursprüngliche Frage, aber eine wiederverwendbare Lösung, wenn Sie jemals mit Abfragezeichenfolgen in JavaScript arbeiten müssen :)

10voto

CB01 Punkte 373

Wenn Sie wissen, dass Sie nur diese eine Querystring-Variable haben, können Sie einfach Folgendes tun:

var dest = location.search.replace(/^.*?\=/, '');

7voto

amiuhle Punkte 2593

Die folgende Funktion wird den Suchstring mit einem regulären Ausdruck analysieren, das Ergebnis zwischenspeichern und den Wert der angeforderten Variablen zurückgeben:

window.getSearch = function(variable) {
  var parsedSearch;
  parsedSearch = window.parsedSearch || (function() {
    var match, re, ret;
    re = /\??(.*?)=([^\&]*)&?/gi;
    ret = {};
    while (match = re.exec(document.location.search)) {
      ret[match[1]] = match[2];
    }
    return window.parsedSearch = ret;
  })();
  return parsedSearch[variable];
};

Sie können sie entweder einmal ohne Parameter aufrufen und mit dem window.parsedSearch Objekt arbeiten, oder später getSearch aufrufen. Ich habe das nicht vollständig getestet, der reguläre Ausdruck könnte noch einige Anpassungen benötigen...

5voto

Madbreaks Punkte 18019

Wie wäre es damit?

function getQueryVar(varName){
    // Greifen Sie die Abfragezeichenfolge ab und entschlüsseln Sie sie - indem Sie ein '&' hinzufügen, bleibt der RegExp einfach
    // für dieses Beispiel.
    var queryStr = unescape(window.location.search) + '&';

    // Dynamischer Ersatz-RegExp
    var regex = new RegExp('.*?[&\\?]' + varName + '=(.*?)&.*');

    // Wenden Sie den RegExp auf die Abfragezeichenfolge an
    var val = queryStr.replace(regex, "$1");

    // Wenn die Zeichenfolge gleich ist, haben wir keine Übereinstimmung gefunden - geben Sie false zurück
    return val == queryStr ? false : val;
}

.. rufen Sie es einfach mit folgendem auf:

alert('Var "dest" = ' + getQueryVar('dest'));

Prost

4voto

jdavid.net Punkte 731

Ich wollte eine einfache Funktion haben, die eine URL als Eingabe nimmt und eine Karte der Abfrageparameter zurückgibt. Wenn ich diese Funktion verbessern würde, würde ich den Standard für Array-Daten in der URL unterstützen und/oder verschachtelte Variablen.

Dies sollte mit der jQuery.param( qparams ) Funktion vor- und zurückarbeiten.

function getQueryParams(url){
    var qparams = {},
        parts = (url||'').split('?'),
        qparts, qpart,
        i=0;

    if(parts.length <= 1 ){
        return qparams;
    }else{
        qparts = parts[1].split('&');
        for(i in qparts){

            qpart = qparts[i].split('=');
            qparams[decodeURIComponent(qpart[0])] = 
                           decodeURIComponent(qpart[1] || '');
        }
    }

    return qparams;
};

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X