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

12voto

Fancyoung Punkte 2158

Ich benutze

function getVal(str) {
    var v = window.location.search.match(new RegExp('(?:[\?\&]'+str+'=)([^&]+)'));
    return v ? v[1] : null;
}

0 Stimmen

Bitte fügen Sie eine Erklärung hinzu. Ihre Antwort wird derzeit als "geringe Qualität" markiert und könnte letztendlich ohne weitere Informationen entfernt werden.

0 Stimmen

Ich habe festgestellt, dass wenn am Ende der URL eine Zeichenfolge wie '#id' vorhanden ist, der letzte Parameterwert wie 'somevalue#id' zurückgegeben wird.

0 Stimmen

@Ayano window.location.search wird keine Hash-Zeichen wie #id enthalten.

11voto

Folusho Oladipo Punkte 192

Hier ist meine Lösung. Wie von Andy E empfohlen, während er diese Frage beantwortete, ist es nicht gut für die Leistung Ihres Skripts, wenn es wiederholt verschiedene Regex-Strings erstellt, Schleifen durchläuft usw., nur um einen einzelnen Wert zu erhalten. Daher habe ich ein einfacheres Skript entwickelt, 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 beliebigen Zeitpunkt in der Zukunft jeden gewünschten Wert aus dieser Variablen mit dem entsprechenden Schlüssel abrufen. Beachten Sie, dass es auch die URI-Dekodierung übernimmt (d. h. Dinge wie %20) und das + durch ein Leerzeichen ersetzt:

 function getUrlQueryParams(url) {
  var queryString = url.split("?")[1];
  var keyValuePairs = queryString.split("&");
  var keyValue = [];
  var queryParams = {};
  keyValuePairs.forEach(function(pair) {
    keyValue = pair.split("=");
    queryParams[keyValue[0]] = decodeURIComponent(keyValue[1]).replace(/\+/g, " ");
});
  return queryParams;
}

Hier sind ein paar Tests des Skripts für Sie zum Ansehen:

// Query-Parameter nur mit Zeichenfolgen, keine Sonderzeichen.
var currentParams = getUrlQueryParams("example.com/foo?number=zero");
alert(currentParams["number"]); // Gibt "zero" aus.

// Für die von Ihnen angegebene URL...
var someParams = getUrlQueryParams("www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5 ");
alert(someParams["c"]); // Gibt "m2-m3-m4-m5" aus.

// Für einen Abfrageparameter mit URI-Codierung...
var someParams = getUrlQueryParams("www.example.com/t.html?phrase=a%20long%20shot&location=Silicon+Valley%2C+USA");
alert(someParams["phrase"]); // Gibt "a long shot" aus.
alert(someParams["location"]); // Gibt "Silicon Valley, USA" aus.

0 Stimmen

.replace("+", " ") ersetzt nur das erste Vorkommen. Du musst .replace(/\+/g, " "); verwenden.

10voto

simhumileco Punkte 26451

Der einfachste Weg ist die Verwendung der Methode replace():

Aus dem urlStr String:

paramVal = urlStr.replace(/.*param_name=([^&]*).*|(.*)/, '$1');

oder aus der aktuellen URL:

paramVal = document.URL.replace(/.*param_name=([^&]*).*|(.*)/, '$1');

Erklärung:

  • document.URL - Schnittstelle, die die Dokumentenposition (Seiten-URL) als Zeichenkette zurückgibt.
  • replace() - Methode, die eine neue Zeichenkette zurückgibt, bei der bestimmte oder alle Übereinstimmungen eines Musters durch eine Ersetzung ersetzt werden.
  • /.*param_name=([^&]*).*/ - das von Schrägstrichen eingeschlossene Reguläre Ausdruck-Muster bedeutet:

    • .* - null oder mehr beliebige Zeichen,
    • param_name= - der gesuchte Parametername,
    • () - Gruppe im regulären Ausdruck,
    • [^&]* - ein oder mehrere beliebige Zeichen, ausgenommen &,
    • | - Alternative,
    • $1 - Verweis auf die erste Gruppe im regulären Ausdruck.

    var urlStr = 'www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5'; var c = urlStr.replace(/.c=([^&]).|(.)/, '$1'); var notExisted = urlStr.replace(/.not_existed=([^&]).|(.)/, '$1'); console.log(c === '${c}'); console.log(notExisted === '${notExisted}');

1 Stimmen

Schöne Lösung, aber wenn der Parameter nicht gefunden wird, wird der gesamte String zurückgegeben. Ich würde in diesem Fall "undefined" erwarten.

1 Stimmen

Hallo @pensan, vielen Dank für deinen großartigen Kommentar. Ich habe gerade dem regulären Ausdruck die Behandlung der Situation hinzugefügt, wenn der Parameter nicht in der URL erscheint. In diesem Fall erhalten wir den leeren String (nicht den gesamten String).

10voto

Tyson Punkte 968

Diese Frage hat zu viele Antworten, deshalb füge ich eine weitere hinzu.

/**
 * analysiert und gibt URI-Abfrageparameter zurück
 * 
 * @param {string} param param
 * @param {bool?} asArray falls true, gibt ein Array anstelle eines Skalars zurück
 * @returns {Object|Array} 
 */
function getURIParameter(param, asArray) {
    return document.location.search.substring(1).split('&').reduce(function(p,c) {
        var parts = c.split('=', 2).map(function(param) { return decodeURIComponent(param); });
        if(parts.length == 0 || parts[0] != param) return (p instanceof Array) && !asArray ? null : p;
        return asArray ? p.concat(parts.concat(true)[1]) : parts.concat(true)[1];
    }, []);
}

Verwendung:

getURIParameter("id")  // gibt die letzte ID zurück oder null, wenn nicht vorhanden
getURIParameter("id", true) // gibt ein Array aller IDs zurück

Dieser Code behandelt leere Parameter (Schlüssel, die ohne "=Wert" vorhanden sind), die Bereitstellung von Skalar- und Array-basierten Wertabfragungen sowie die ordnungsgemäße Codierung von URI-Komponenten.

8voto

Ravi Patel Punkte 601

Für Einzelparameerwert wie z. B. index.html?msg=1 den folgenden Code verwenden,

$(window).load(function(){
    queryString();
});

function queryString()
{
    var queryString = window.location.search.substring(1);
    var varArray = queryString.split("="); //z. B. index.html?msg=1

    var param1 = varArray[0];
    var param2 = varArray[1];

}

Für Alle Parameter Werte verwenden Sie den folgenden Code,

$(window).load(function(){
    queryString();
});

function queryString()
{
    var queryString = window.location.search;
    var varArray = queryString.split("&");
    for (var i=0;i

1 Stimmen

Ich mag diese Lösung!

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