Wie überprüfe ich, ob ein Abfragezeichenfolgenwert über JavaScript vorhanden ist?

90

Wie kann ich q=mithilfe von JavaScript oder jQuery überprüfen, ob die Abfragezeichenfolge eine enthält ?

mrblah
quelle
Dies kann ebenfalls hilfreich sein: stackoverflow.com/a/12151322 - enthält Informationen zu URLSearchParams , z. B.: Gibtvar url = new URLSearchParams(location.search); url.has("my_great_query"); zurück, truewenn sich diese Abfragezeichenfolge in Ihrer URL befindet. Sie können dann seinen Wert mit erhalten url.get("my_great_query");.
user1063287

Antworten:

103
var field = 'q';
var url = window.location.href;
if(url.indexOf('?' + field + '=') != -1)
    return true;
else if(url.indexOf('&' + field + '=') != -1)
    return true;
return false
LorenVS
quelle
7
Mehrere Rückgabewege sind eine persönliche Wahl. Ich verwende sie, weil ich denke, dass sie zu saubererem Code führen, da sie mir helfen, verschachtelte if-Anweisungen zu vermeiden und genau zu zeigen, was an einem bestimmten Punkt im Code vor sich geht. In den Stict-Fällen sind sowohl die linke als auch die rechte Seite immer Zahlen. Welchen Unterschied würde es also machen, auf strenge Gleichheitsoperatoren umzusteigen?
LorenVS
4
Saubererer Code? ... Warum nicht einfach den indexOf-Test zurückgeben, anstatt ihn in eine völlig nutzlose vorläufige IF-Anweisung zu setzen?
James
4
Ich stimme JP zu. Sie haben vielleicht die richtige Lösung geschrieben, aber Ihr Code ist wirklich schlampig. Wo bist du geschweifte Klammern? Sie sollten "The Good Parts" lesen, in dem Code, der einen Stil ohne geschweifte Klammern geschrieben hat, unter bestimmten Bedingungen versagt und bei der Wartung Verwirrung stiftet.
2
url.indexOf (Feld + '=')! = -1 war genug, denke ich. Es ist egal, ob es am Anfang ist oder nicht
JJJ
2
@yyy Nein, war es nicht. Wenn Sie eine Abfragezeichenfolge wie hatten ?kodiaq=1, würde ein Aufruf url.indexOf('q=')ohne Präfix mit &oder ?Sie glauben machen, dass der qParameter vorhanden ist.
Michalstanko
112

Sie können auch einen regulären Ausdruck verwenden:

/[?&]q=/.test(location.search)
Gumbo
quelle
1
Eigentlich würde es eher so aussehen: if (! new RegExp ("[? &] hfPageToken ="). test (s.data)) // wenn hfPageToken-Daten nicht bereits in der Anfrage vorhanden sind {s.data = s.data ? [s.data, tokenParam] .join ("&"): tokenParam; }
Dragos Durlut
9
Nur um zu verdeutlichen, das funktioniert großartig if(/[?&]q=/.test(location.search)) { alert("match"); }(ich war ein bisschen verwirrt wegen @DragosDurlut Kommentar. :)
Leia
1
Yoda würde zu regulären Ausdrücken sagen: "Kürzere Codes sind sie ... leichter zu lesen, sie sind nicht".
RayLoveless
23

Verwenden von URL:

url = new URL(window.location.href);

if (url.searchParams.get('test')) {

}

BEARBEITEN: Wenn Sie über die Kompatibilität traurig sind, würde ich https://github.com/medialize/URI.js/ empfehlen .

Damien Roche
quelle
4
Schön, aber keine IE-Unterstützung.
UpTheCreek
1
@UpTheCreek erscheint leider so. Ich musste es für eine kompatible Version austauschen. Wir können träumen.
Damien Roche
8

Das einfache Javascript-Codebeispiel, das Ihre Frage buchstäblich beantwortet:

return location.search.indexOf('q=')>=0;

Das einfache Javascript-Codebeispiel, das versucht festzustellen, ob der Parameter q vorhanden ist und einen Wert hat:

var queryString=location.search;
var params=queryString.substring(1).split('&');
for(var i=0; i<params.length; i++){
    var pair=params[i].split('=');
    if(decodeURIComponent(pair[0])=='q' && pair[1])
        return true;
}
return false;
Peter Dolberg
quelle
7
Das erste Beispiel wird wahr fürfooq=bar
Mickadoo
4

eine weitere Variante, aber fast die gleiche wie die Gumbos-Lösung:

var isDebug = function(){
    return window.location.href.search("[?&]debug=") != -1;
};
Humppakäräjät
quelle
3

Mit dieser Funktion können Sie Parameter von der URL in JS abrufen

function getQuery(q) {
    return (window.location.search.match(new RegExp('[?&]' + q + '=([^&]+)')) || [, null])[1];
}
Bafi
quelle
3

Versuche dies

//field "search";
var pattern = /[?&]search=/;
var URL = location.search;

if(pattern.test(URL))
{
    alert("Found :)");
}else{
    alert("Not found!");
}

JSFiddle: https://jsfiddle.net/codemirror/zj4qyao2/

Codespiegel
quelle
1

In modernen Browsern ist dies dank der URLSearchParamsBenutzeroberfläche viel einfacher geworden . Dies definiert eine Vielzahl von Dienstprogrammmethoden, die mit der Abfragezeichenfolge einer URL arbeiten.

Angenommen, unsere URL lautet https://example.com/?product=shirt&color=blue&newuser&size=m, können Sie die Abfragezeichenfolge mit folgenden Elementen abrufen window.location.search:

const queryString = window.location.search;
console.log(queryString);
// ?product=shirt&color=blue&newuser&size=m

Anschließend können Sie die Parameter der Abfragezeichenfolge analysieren, indem Sie Folgendes verwenden URLSearchParams:

const urlParams = new URLSearchParams(queryString);

Dann können Sie eine der Methoden für das Ergebnis aufrufen.

Gibt beispielsweise URLSearchParams.get()den ersten Wert zurück, der dem angegebenen Suchparameter zugeordnet ist:

const product = urlParams.get('product')
console.log(product);
// shirt

const color = urlParams.get('color')
console.log(color);
// blue

const newUser = urlParams.get('newuser')
console.log(newUser);
// empty string

Mit können Sie URLSearchParams.has()überprüfen, ob ein bestimmter Parameter vorhanden ist:

console.log(urlParams.has('product'));
// true

console.log(urlParams.has('paymentmethod'));
// false

Für weitere Informationen klicken Sie bitte hier .

Plabon Dutta
quelle
0

Ich habe diese Bibliothek schon einmal benutzt, die ziemlich gute Arbeit für das leistet, wonach Sie suchen. Speziell:-

qs.contains(name)
    Returns true if the querystring has a parameter name, else false.

    if (qs2.contains("name1")){ alert(qs2.get("name1"));}
Gavin Gilmour
quelle
0

Dies sollte helfen:

function getQueryParams(){
    try{
        url = window.location.href;
        query_str = url.substr(url.indexOf('?')+1, url.length-1);
        r_params = query_str.split('&');
        params = {}
        for( i in r_params){
            param = r_params[i].split('=');
            params[ param[0] ] = param[1];
        }
        return params;
    }
    catch(e){
       return {};
    }
}
Notausschalter
quelle