Ich habe eine URL mit einigen GET-Parametern wie folgt:
www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5
Ich muss den ganzen Wert von bekommen c
. Ich habe versucht, die URL zu lesen, aber ich habe nur m2
. Wie mache ich das mit JavaScript?
Ich habe eine URL mit einigen GET-Parametern wie folgt:
www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5
Ich muss den ganzen Wert von bekommen c
. Ich habe versucht, die URL zu lesen, aber ich habe nur m2
. Wie mache ich das mit JavaScript?
Antworten:
In JavaScript selbst ist nichts für die Verarbeitung von Abfragezeichenfolgenparametern integriert.
Code, der in einem (modernen) Browser ausgeführt wird, kann das
URL
Objekt verwenden (das Teil der APIs ist, die von Browsern für JS bereitgestellt werden):Für ältere Browser (einschließlich Internet Explorer) können Sie diese Polyfüllung oder den Code aus der Originalversion dieser Antwort verwenden, die älter ist als
URL
:Sie könnten darauf zugreifen
location.search
, was Ihnen von der geben würde?
Zeichen bis zum Ende der URL oder dem Beginn der Fragmentkennung (#foo) erhalten würde, je nachdem, was zuerst eintritt.Dann können Sie es damit analysieren:
Sie können die Abfragezeichenfolge von der URL der aktuellen Seite abrufen mit:
quelle
URL
URLSearchParams
. Oder Sie können diesem Problem ausweichen, indem Sie die Zeilevar c = url.searchParams.get("c");
in der obigen Antwort durch ersetzenvar c = new URLSearchParams(window.location.search).get("c");
.new URL()
erwartet, eine ordnungsgemäß codierte URL als Argument zu erhalten.decodeURIComponent
erwartet, dass eine Komponente einer URL übergeben wird, nicht eine ganze URL.decodeURIComponent
sollte in diesem Fall nicht verwendet werdenparse_query_string
Funktion führt eine Doppeldecodierung von durchvalue
. Das=
von @ManelClos erwähnte Problem kann durch Hinzufügen eines zweiten Parameters2
(limit
) behoben werdenvars[i].split()
.Die meisten Implementierungen, die ich gesehen habe, haben die URL-Dekodierung der Namen und Werte verpasst.
Hier ist eine allgemeine Dienstprogrammfunktion, die auch die richtige URL-Dekodierung durchführt:
quelle
qs.split('+').join(' ');
und nichtqs.replace(/\+/g, ' ');
?Quelle
quelle
Dies ist eine einfache Möglichkeit, nur einen Parameter zu überprüfen:
Beispiel-URL:
Beispiel Javascript:
Wenn "myParam" in der URL ... -Variable vorhanden ist, enthält myParam "2", andernfalls ist es undefiniert.
Vielleicht möchten Sie in diesem Fall einen Standardwert:
Update: Das funktioniert besser:
Und es funktioniert auch dann richtig, wenn die URL voller Parameter ist.
quelle
http://myserver/action?myParam=2&anotherParam=3
würde"2"
aber nicht nachgeben"2&anotherParam=3"
.(location.search.split('myParam=')[1]||'').split('&')[0]
- zur Verwendung mit mehreren Parametern oder möglicherweise fehlendenmyParam
.location.search.split('myParam=').splice(1).join('').split('&')[0]
[?|&]
wie in[?|&]myParam=([^&]+)
result = decodeURIComponent(result);
Browser-Anbieter haben eine native Methode implementiert, um dies über URL und URLSearchParams zu tun.
Wird derzeit in Firefox, Opera, Safari, Chrome und Edge unterstützt. Eine Liste der Browserunterstützung finden Sie hier .
https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams https://developer.mozilla.org/en-US/docs/Web/API/URL/URL
https://url.spec.whatwg.org/
Eric Bidelman, Ingenieur bei Google, empfiehlt die Verwendung dieser Polyfüllung für nicht unterstützte Browser.
quelle
new URLSearchParams("www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5").get('a')
Rückkehrnull
für mich? (Auf Chrome Stall).b
undc
scheinen gut zu funktionieren.url.searchParams
stattdessennew URLSearchParams(url.search)
.Ich fand das vor Ewigkeiten sehr einfach:
Dann nenne es so:
quelle
decodeURIComponent()
Wert, da Sie normalerweise damit arbeiten möchten. Verwenden Siewindow.location.search
stattdessenwindow.location.href
, weil Sie nur an den Parametern interessiert sind, nicht an der gesamten URL.var vars = {}; window.location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) { vars[key] = value; }); return vars;
Sie können die Abfragezeichenfolge eingeben
location.search
und dann alles nach dem Fragezeichen aufteilen:quelle
?array[]=1&array[]=2
produziert{"array[]": "2"}
, was eindeutig falsch ist.[]
Muster nur in einigen Fällen eine Bedeutung (z. B. PHP), in anderen jedoch nicht. Also nicht "eindeutig falsch" - nur nicht implementiert, um einen nicht standardmäßigen Fall zu behandeln, den Sie möglicherweise behandeln müssen oder nicht.Ich habe eine einfachere und elegantere Lösung geschrieben.
quelle
[0-9]
für\d
Eine super einfache Möglichkeit, URLSearchParams zu verwenden .
Es wird derzeit in Chrome, Firefox, Safari, Edge und anderen unterstützt .
quelle
Hier ist eine rekursive Lösung ohne Regex und mit minimaler Mutation (nur das params-Objekt ist mutiert, was meiner Meinung nach in JS unvermeidbar ist).
Es ist großartig, weil es:
Code:
quelle
Ich habe eine Funktion erstellt, die dies tut:
Update 26.05.2017, hier ist eine ES7-Implementierung (läuft mit der voreingestellten Stufe 0, 1, 2 oder 3 von babel):
Einige Tests:
Update 26.03.2008, hier ist eine Typescript-Implementierung:
Update 13.02.2019, hier ist eine aktualisierte TypeScript-Implementierung, die mit TypeScript 3 funktioniert.
quelle
Object {"": ""}
Sieh dir das an
quelle
ECMAScript 6-Lösung:
quelle
function urlParams(url) { const [, searchParams = ''] = url.split('?') return searchParams.split('&') .map(v => v.split('=')) .reduce((map, [key = '', value]) => key.length ? map.set(key, decodeURIComponent(value)) : map, new Map())
}ich benutze
quelle
window.location.search
kein Hash wie#id
.location.href
, um das Ergebnis anstelle derlocation.search
.Danke zu vergleichen.Ich benutze die parseUri Bibliothek. Damit können Sie genau das tun, wonach Sie fragen:
quelle
Hier ist meine Lösung. Wie von Andy E bei der Beantwortung dieser Frage empfohlen , ist es nicht gut für die Leistung Ihres Skripts, wenn wiederholt verschiedene Regex-Zeichenfolgen erstellt, Schleifen ausgeführt usw. werden, um nur einen einzigen Wert zu erhalten. Also habe ich mir ein einfacheres Skript ausgedacht, das alle GET-Parameter in einem einzigen Objekt zurückgibt. Sie sollten es nur einmal aufrufen, das Ergebnis einer Variablen zuweisen und dann zu einem späteren Zeitpunkt mit dem entsprechenden Schlüssel einen beliebigen Wert von dieser Variablen abrufen. Beachten Sie, dass es sich auch um die URI-Dekodierung kümmert (z. B.% 20) und + durch ein Leerzeichen ersetzt:
Hier sind einige Tests des Skripts, die Sie sehen können:
quelle
Oder wenn Sie die Verwendung des URI-Parsing-Rads nicht neu erfinden möchten URI.js.
So ermitteln Sie den Wert eines Parameters mit dem Namen foo:
Was das tut ist
(die Übergabe von true weist sie an, ein Objekt auszugeben).
Hier ist eine Geige dafür ... http://jsfiddle.net/m6tett01/12/
quelle
Verwenden Sie für einen einzelnen Parameterwert wie diesen index.html? Msg = 1 den folgenden Code:
Verwenden Sie für alle Parameterwerte den folgenden Code:
quelle
Hier poste ich ein Beispiel. Aber es ist in jQuery. Hoffe, es wird anderen helfen:
quelle
Der kürzeste Weg:
quelle
new URL(location.href).searchParams.get("my_key")
over bevorzugen,URLSearchParams
da letzteres beim Abrufen des ersten Abfrageparameters einer URL fehlschlägt.Diese Frage hat zu viele Antworten, also füge ich eine weitere hinzu.
Verwendungszweck:
Dies bewältigt leere Parameter (die Schlüssel sind ohne vorhanden
"=value"
), die Offenlegung sowohl einer skalaren als auch einer Array-basierten API zum Abrufen von Werten sowie die ordnungsgemäße Dekodierung von URI-Komponenten.quelle
Der einfachste Weg mit der
replace()
Methode:Aus der
urlStr
Zeichenfolge:oder von der aktuellen URL :
Erläuterung:
document.URL
- interface gibt den Dokumentspeicherort (Seiten-URL) als Zeichenfolge zurück.replace()
- Die Methode gibt eine neue Zeichenfolge zurück, bei der einige oder alle Übereinstimmungen eines Musters durch eine Ersetzung ersetzt werden ./.*param_name=([^&]*).*/
- das Muster der regulären Ausdrücke zwischen Schrägstrichen, was bedeutet:.*
- null oder mehr Zeichen,param_name=
- param Name, der serched ist,()
- Gruppe im regulären Ausdruck,[^&]*
- eines oder mehrere Zeichen mit Ausnahme von&
,|
- Wechsel,$1
- Verweis auf die erste Gruppe im regulären Ausdruck.quelle
Noch ein Vorschlag.
Es gibt bereits einige gute Antworten, aber ich fand sie unnötig komplex und schwer zu verstehen. Dies ist kurz, einfach und gibt ein einfaches assoziatives Array mit Schlüsselnamen zurück, die den Token-Namen in der URL entsprechen.
Ich habe unten eine Version mit Kommentaren für diejenigen hinzugefügt, die lernen möchten.
Beachten Sie, dass dies für die Schleife von jQuery ($ .each) abhängt, die ich anstelle von forEach empfehle. Ich finde es einfacher, die Cross-Browser-Kompatibilität mit jQuery auf der ganzen Linie sicherzustellen, als einzelne Fixes einzufügen, um die neuen Funktionen zu unterstützen, die in älteren Browsern nicht unterstützt werden.
Bearbeiten: Nachdem ich dies geschrieben habe, habe ich Eric Elliotts Antwort bemerkt, die fast dieselbe ist, obwohl sie für jeden verwendet wird, während ich generell dagegen bin (aus den oben genannten Gründen).
Kommentierte Version:
Für die folgenden Beispiele nehmen wir diese Adresse an:
Sie können die URL-Token Ihrer eigenen Variablen zuweisen:
Verweisen Sie dann auf jedes URL-Token mit folgendem Namen:
Dies würde "4" drucken.
Sie können auch einfach direkt auf einen Token-Namen in der Funktion verweisen:
... was "Murray" drucken würde.
quelle
Von hier erhalten: http://jquery-howto.blogspot.ru/2009/09/get-url-parameters-values-with-jquery.html
quelle
Einfacher Weg
dann nenne es wie getParams (url)
quelle
Ich musste eine URL-GET-Variable lesen und eine Aktion basierend auf dem URL-Parameter ausführen. Ich suchte hoch und niedrig nach einer Lösung und stieß auf diesen kleinen Code. Es liest im Grunde die aktuelle Seiten-URL, führt einen regulären Ausdruck für die URL aus und speichert dann die URL-Parameter in einem assoziativen Array, auf das wir leicht zugreifen können.
Als Beispiel, wenn wir die folgende URL mit dem Javascript unten hatten.
Alles, was wir tun müssen, um die Parameter-ID und die Seite zu erhalten, ist Folgendes aufzurufen:
Der Code lautet:
quelle
quelle
Dieser Kern von Eldon McGuinness ist bei weitem die vollständigste Implementierung eines JavaScript-Abfragezeichenfolgen-Parsers, den ich bisher gesehen habe.
Leider ist es als jQuery-Plugin geschrieben.
Ich habe es in Vanilla JS umgeschrieben und einige Verbesserungen vorgenommen:
Siehe auch diese Geige .
quelle
Elegante, funktionale Lösung
Erstellen wir ein Objekt, das URL-Parameternamen als Schlüssel enthält, und extrahieren den Parameter dann einfach anhand seines Namens:
quelle
return
Folgendes mache ich:
quelle