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 :/

107voto

VaMoose Punkte 1361

Ich habe das vor langer Zeit gefunden, sehr einfach:

function getUrlVars() {
    var vars = {};
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,    
    function(m,key,value) {
      vars[key] = value;
    });
    return vars;
  }

Rufe es dann so auf:

var fType = getUrlVars()["type"];

8 Stimmen

+1 großartige Lösung - elegant, effizient und intelligent in Bezug auf die Verwendung. Für meine Zwecke besser als die andere akzeptierte Lösung

0 Stimmen

Kurz + einfach + leistungsstark = großartig

2 Stimmen

Sehr schön, es funktioniert auch mit location.search anstelle von window.location.href.

83voto

Blixt Punkte 48333

Sie können den Query-String in location.search erhalten und dann alles nach dem Fragezeichen aufteilen:

var params = {};

if (location.search) {
    var parts = location.search.substring(1).split('&');

    for (var i = 0; i < parts.length; i++) {
        var nv = parts[i].split('=');
        if (!nv[0]) continue;
        params[nv[0]] = nv[1] || true;
    }
}

// Jetzt können Sie die gewünschten Parameter wie folgt erhalten:
var abc = params.abc;

4 Stimmen

Was ist mit dem URL-Decodieren der Parameter-Namen und -Werte?

0 Stimmen

Dieser Ansatz behandelt keine Arrays. Zum Beispiel erzeugt ?array[]=1&array[]=2 {"array[]": "2"}, was offensichtlich falsch ist.

2 Stimmen

@Kafoso Hier gibt es kein klares Richtig oder Falsch. Zunächst einmal hat das wiederholte Felder mit den gleichen Namen kein spezifiziertes Standardverhalten, und es liegt am Parser, damit umzugehen. Außerdem hat das [] Muster nur in einigen Fällen eine Bedeutung (z. B. in PHP), aber nicht in anderen. Also nicht "klar falsch" - einfach nicht implementiert, um mit einem nicht standardmäßigen Fall umzugehen, den Sie möglicherweise oder möglicherweise nicht behandeln müssen.

54voto

spencer.sm Punkte 16936

Ein super einfacher Weg, der URLSearchParams verwendet.

function getParam(param){
  return new URLSearchParams(window.location.search).get(param);
}

Derzeit wird dies in Chrome, Firefox, Safari, Edge und anderen unterstützt.

0 Stimmen

Erhalten Sie den Fehler: 'SCRIPT5009: 'URLSearchParams' ist nicht definiert', wenn Sie Edge ausführen.

0 Stimmen

@AndreasPresthammer Welche Version von Edge?

0 Stimmen

@spencer-sm Microsoft Edge 41.16299.820.0

39voto

Natus Drew Punkte 1746

Ich habe eine einfachere und elegantere Lösung geschrieben.

var arr = document.URL.match(/room=([0-9]+)/)
var room = arr[1];

0 Stimmen

Schau mal, zwei Zeilen, macht genau das, was es soll - und wird nicht brechen, wenn jemand versucht, nach Schwachstellen zu suchen und eine Menge zusätzlicher Zeichen und Abfragen hinzufügt, im Gegensatz zu einigen dieser Lösungen. Prost Kumpel!

0 Stimmen

Das erledigt den Job richtig und das nur in 2 Zeilen. Tolle Antwort!

0 Stimmen

Ich denke, es wäre hilfreich für andere, wenn eine Überprüfung auf Null eingefügt würde. Andernfalls ist hier ein Beispiel: stackoverflow.com/a/36076822/1945948 (Mein Änderungsversuch wurde abgelehnt).

34voto

Jai Punkte 877

Hier ist eine rekursive Lösung, die keine Regex verwendet und minimale Mutationen aufweist (nur das params-Objekt wird mutiert, was ich in JS für unvermeidbar halte).

Es ist großartig, weil es:

  • Rekursiv ist
  • Mit mehreren Parametern desselben Namens umgehen kann
  • Gut mit fehlerhaften Parameterzeichenfolgen umgehen kann (fehlende Werte, usw.)
  • Nicht kaputt geht, wenn '=' im Wert vorhanden ist
  • URL-Dekodierung durchführt
  • Und schließlich, es ist großartig, weil es...argh!!!

Code:

var get_params = function(search_string) {

  var parse = function(params, pairs) {
    var pair = pairs[0];
    var parts = pair.split('=');
    var key = decodeURIComponent(parts[0]);
    var value = decodeURIComponent(parts.slice(1).join('='));

    // Mit mehreren Parametern desselben Namens umgehen
    if (typeof params[key] === "undefined") {
      params[key] = value;
    } else {
      params[key] = [].concat(params[key], value);
    }

    return pairs.length == 1 ? params : parse(params, pairs.slice(1))
  }

  // Führt das führende ? weg
  return search_string.length == 0 ? {} : parse({}, search_string.substr(1).split('&'));
}

var params = get_params(location.search);

// Schließlich, um den gewünschten Parameter zu erhalten
params['c'];

32 Stimmen

Du... du hast zweimal rekursiv gesagt.

0 Stimmen

Es kann den ersten Parameter in der nächsten URL nicht finden: www.mysite.com?first=1&second=2

0 Stimmen

Hallo Mario, hier ist ein JSFiddle, das zeigt, dass es mit dieser URL funktioniert: jsfiddle.net/q6xfJ - Wenn du einen Fehler gefunden hast, handelt es sich vielleicht um einen spezifischen Browser? Bei Tests beachte bitte, dass die von mir bereitgestellte Antwort location.search verwendet, das ist der Teil '?first=1&second=2' der URL. Prost :)

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