Ich muss die Abfragezeichenfolge www.mysite.com/default.aspx?dest=aboutus.aspx
analysieren. Wie bekomme ich die Variable dest
in JavaScript?
- Wie kann ich Abfrage-String-Werte in JavaScript erhalten? (73 Antworten )
Antworten
Zu viele Anzeigen?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 :)
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...
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
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;
};
0 Stimmen
Schau dir diese Lösung an. Mit seiner Funktion müsstest du einfach nicht
gup('dest')
aufrufen, um den URL-Parameterdest
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
codepen.io/iegik/pen/NGRzoY?editors=101
0 Stimmen
Alter Thread, aber immer noch suchen Leute danach wie ich, Hier ist ein guter Ausschnitt gist.github.com/cowboy/1025817
0 Stimmen
Ich habe ein Paket geschrieben, das dir gefallen könnte, uqs, das es dir ermöglicht, einfach
var params = QS.parse(location.search); console.info(params['dest']); // > 'aboutus.aspx'
zu machen.0 Stimmen
Ich benutze einfach das Query-String-Paket: npmjs.com/package/query-string
0 Stimmen
Nicht identisch. Erhalt ist anders als Analysieren.
36 Stimmen
Es gibt bereits eine (nicht-IE)-Funktion in nativem JavaScript, um dies zu tun. Es ist nicht notwendig, das Rad neu zu erfinden: developer.mozilla.org/en-US/docs/Web/API/URLSearchParams
0 Stimmen
Alle Antworten auf diese Frage fehlt eine wichtige Komponente, wie unter url.spec.whatwg.org/#concept-urlencoded-parser angegeben - die Ersetzung des Pluszeichens in den Variablennamen und -werten der Abfragezeichenfolge durch Leerzeichen.
0 Stimmen
Dies ist die kompakteste Version:
const qs = (qs) => qs.substring(1).split('&').reduce((m, arg) => {const [key, value] = arg.split('='); m[key] = value; return m;}, {});
. Denken Sie daran, dass der Wert, den Sie dieser Funktion übergeben müssen, wie folgt aussehen sollte:?aaa=12&b&c
. Das Ergebnis wird eine Karte aller Schlüssel und Werte sein.0 Stimmen
Wenn Sie eine kleine, isomorphe Lösung benötigen, schauen Sie sich bundlephobia.com/result?p=isomorphic-querystring@1.2.3 an.
0 Stimmen
Eine einfache Lösung ist var url = "www.meineseite.de/default.aspx?dest=überuns.aspx" var query = new URLSearchParams(url.split("?")[1]) query.get('dest')
0 Stimmen
Die
search
-Eigenschaft desLocation
-Interfaces bietet den Abfrage-String und die meisten modernen Browser bietenURLSearchParams
zur Vereinfachung des Lebens.