1735 Stimmen

Holen Sie die Werte aus den "GET"-Parametern (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 gesamten Wert von c erhalten. Ich habe versucht, die URL zu lesen, aber ich habe nur m2 erhalten. Wie mache ich das mit JavaScript?

9 Stimmen

Bevor Sie eine neue Antwort posten, bedenken Sie bitte, dass es bereits 50+ Antworten auf diese Frage gibt. Stellen Sie bitte sicher, dass Ihre Antwort Informationen enthält, die nicht unter den vorhandenen Antworten zu finden sind.

0 Stimmen

Var url_string = "example.com/t.html?a=1&b=3&c=m2-m3-m4-m5"; //window.location.href var url = new URL(url_string); var c = url.searchParams.get("c"); console.log(c);

1 Stimmen

Es ist verrückt, dass eine, was sollte sein, einfache Frage für JS 50+ Antworten erfordert :/

32voto

Nate Ferrero Punkte 1378

Ich habe eine Funktion geschrieben, die dies tut:

var getUrlParams = function (url) {
  var params = {};
  (url + '?').split('?')[1].split('&').forEach(function (pair) {
    pair = (pair + '=').split('=').map(decodeURIComponent);
    if (pair[0].length) {
      params[pair[0]] = pair[1];
    }
  });
  return params;
};

Update 26.05.2017, hier ist eine ES7-Implementierung (läuft mit Babel-Preset Stage 0, 1, 2 oder 3):

const getUrlParams = url => `${url}?`.split('?')[1]
  .split('&').reduce((params, pair) =>
    ((key, val) => key ? {...params, [key]: val} : params)
    (...`${pair}=`.split('=').map(decodeURIComponent)), {});

Einige Tests:

console.log(getUrlParams('https://google.com/foo?a=1&b=2&c')); // Wird {a: '1', b: '2', c: ''} ausgeben
console.log(getUrlParams('/foo?a=1&b=2&c')); // Wird {a: '1', b: '2', c: ''} ausgeben
console.log(getUrlParams('?a=1&b=2&c')); // Wird {a: '1', b: '2', c: ''} ausgeben
console.log(getUrlParams('https://google.com/')); // Wird {} ausgeben
console.log(getUrlParams('a=1&b=2&c')); // Wird {} ausgeben

Update 26.03.2018, hier ist eine TypeScript-Implementierung:

const getUrlParams = (search: string) => `${search}?`
  .split('?')[1]
  .split('&')
  .reduce(
    (params: object, pair: string) => {
      const [key, value] = `${pair}=`
        .split('=')
        .map(decodeURIComponent)

      return key.length > 0 ? { ...params, [key]: value } : params
    },
    {}
  )

Update 13.02.2019, hier ist eine aktualisierte TypeScript-Implementierung, die mit TypeScript 3 funktioniert:

interface IParams { [key: string]: string }

const paramReducer = (params: IParams, pair: string): IParams => {
  const [key, value] = `${pair}=`.split('=').map(decodeURIComponent)

  return key.length > 0 ? { ...params, [key]: value } : params
}

const getUrlParams = (search: string): IParams =>
  `${search}?`.split('?')[1].split('&').reduce(paramReducer, {})

0 Stimmen

Auf einer URL ohne Abfrageparameter gibt dies Objekt { "": "" } zurück.

2 Stimmen

Sieht für mich sauber genug aus. Der Rest der Antworten ist einfach zu viel "Magie" ohne ausreichende Erklärung.

0 Stimmen

Dies ist eine tolle Antwort!

26voto

Dhiral Pandya Punkte 9709

Hier sehen

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

25voto

Zon Punkte 15646

Der kürzeste Weg:

new URL(location.href).searchParams.get("my_key");

3 Stimmen

Ich würde bevorzugen, new URL(location.href).searchParams.get("my_key") anstelle von URLSearchParams zu verwenden, da letzteres fehlschlägt, wenn der erste Abfrageparameter einer beliebigen URL abgerufen wird.

1 Stimmen

Beide Varianten getestet. Ich stimme dir zu. Antwort bearbeitet.

0 Stimmen

Dies ist die Methode, die ich in Projekten verwende.

20voto

veiset Punkte 1893

ECMAScript 6 Lösung:

var params = window.location.search
  .substring(1)
  .split("&")
  .map(v => v.split("="))
  .reduce((map, [key, value]) => map.set(key, decodeURIComponent(value)), new Map())

0 Stimmen

Schön. Übrigens: Da es eine Karte ist, lautet die Verwendung: params.get("Schlüssel");

0 Stimmen

Ich mag es, aber wahrscheinlich bekommt es nicht den ersten Parameter. Ich habe eine Funktion erstellt, die auf Ihrem Beispiel basiert 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()) }

15voto

Chris Dutrow Punkte 45374

Ich verwende die parseUri Bibliothek. Sie ermöglicht es, genau das zu tun, was du verlangst:

var uri = 'www.test.com/t.html&a=1&b=3&c=m2-m3-m4-m5';
var c = uri.queryKey['c'];
// c = 'm2-m3-m4-m5'

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