Come verificare se un valore di stringa di query è presente tramite JavaScript?


91

Come posso verificare se la stringa di query contiene un q=in esso utilizzando JavaScript o jQuery?


Anche questo potrebbe essere di aiuto: stackoverflow.com/a/12151322 - contiene informazioni su URLSearchParams , ad esempio: var url = new URLSearchParams(location.search); url.has("my_great_query");restituisce truese quella stringa di query è nel tuo URL. Puoi quindi ottenere il suo valore con url.get("my_great_query");.
user1063287

Risposte:


104
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

7
I percorsi di ritorno multipli sono una scelta personale, li uso perché penso che portino a un codice più pulito, poiché mi aiutano a evitare istruzioni if ​​annidate e mostrano esattamente cosa sta succedendo a un certo punto nel codice. Per quanto riguarda i casi stict, entrambi i lati sinistro e destro saranno sempre numeri, quindi quale differenza farebbe il passaggio a operatori di uguaglianza rigorosa?
LorenVS

4
Codice più pulito? ... Perché non restituire semplicemente il test indexOf, invece di inserirlo in un'istruzione IF preliminare totalmente inutile.
James,

4
Sono d'accordo con JP. Potresti aver scritto la soluzione corretta, ma il tuo codice è davvero sciatto. Dove sei le parentesi graffe? Dovresti leggere "The Good Parts" in cui il codice scritto in uno stile senza parentesi graffe ha dimostrato di fallire in determinate condizioni e produce confusione durante la manutenzione.

2
url.indexOf (field + '=')! = -1 è stato sufficiente penso. Non importa se è all'inizio o no
yyy

2
@yyy No, non lo era. Se avessi una stringa di query come ?kodiaq=1, chiamare url.indexOf('q=')senza prefissarlo con &o ti ?farebbe credere che il qparametro sia presente.
michalstanko

113

Puoi anche usare un'espressione regolare:

/[?&]q=/.test(location.search)

1
in realtà sarebbe più simile a: if (! new RegExp ("[? &] hfPageToken ="). test (s.data)) // se i dati hfPageToken non sono già presenti nella richiesta {s.data = s.data ? [s.data, tokenParam] .join ("&"): tokenParam; }
Dragos Durlut

9
Giusto per chiarire, funziona alla grande if(/[?&]q=/.test(location.search)) { alert("match"); }(ero un po 'confuso a causa del commento di @DragosDurlut. :)
Leia

1
Yoda direbbe riguardo alle espressioni regolari: "Il codice più breve è .. più facile da leggere non lo sono".
RayLoveless


9

Il semplice esempio di codice javascript che risponde letteralmente alla tua domanda:

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

Il semplice esempio di codice javascript che tenta di trovare se il parametro q esiste e se ha un valore:

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;

7
Il primo esempio restituirà vero perfooq=bar
mickadoo

4

un'altra variante, ma quasi la stessa della soluzione Gumbos:

var isDebug = function(){
    return window.location.href.search("[?&]debug=") != -1;
};

3

questa funzione ti aiuta a ottenere parametri dall'URL in JS

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


2

Nei browser moderni, questo è diventato molto più semplice, grazie URLSearchParamsall'interfaccia. Definisce una serie di metodi di utilità per lavorare con la stringa di query di un URL.

Supponendo che il nostro URL sia https://example.com/?product=shirt&color=blue&newuser&size=m, puoi prendere la stringa di query usando window.location.search:

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

È quindi possibile analizzare i parametri della stringa di query utilizzando URLSearchParams:

const urlParams = new URLSearchParams(queryString);

Quindi puoi chiamare uno qualsiasi dei suoi metodi sul risultato.

Ad esempio, URLSearchParams.get()restituirà il primo valore associato al parametro di ricerca specificato:

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

È possibile utilizzare URLSearchParams.has()per verificare se esiste un determinato parametro:

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

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

Per ulteriori letture, fare clic qui .


0

Ho già usato questa libreria in passato, che fa un ottimo lavoro di quello che stai cercando. In particolare: -

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

    if (qs2.contains("name1")){ alert(qs2.get("name1"));}

0

Questo dovrebbe aiutare:

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 {};
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.