Jak sprawdzić, czy wartość ciągu zapytania jest obecna za pomocą JavaScript?


97

Jak mogę sprawdzić, czy ciąg zapytania zawiera w sobie znak q=za pomocą JavaScript lub jQuery?


To też może być pomocne: stackoverflow.com/a/12151322 - zawiera informacje o URLSearchParams , np .: var url = new URLSearchParams(location.search); url.has("my_great_query");zwraca, truejeśli ten ciąg zapytania znajduje się w twoim url. Możesz wtedy uzyskać jego wartość za pomocą url.get("my_great_query");.
user1063287,

Odpowiedzi:


109
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
Wiele ścieżek powrotu to osobisty wybór, używam ich, ponieważ uważam, że prowadzą one do czystszego kodu, ponieważ pomagają mi uniknąć zagnieżdżonych instrukcji if i pokazują dokładnie, co się dzieje w określonym punkcie kodu. Jeśli chodzi o przypadki sztywne, zarówno lewa, jak i prawa strona zawsze będą liczbami, więc jaką różnicę zrobiłoby przejście na operatory ścisłej równości?
LorenVS,

4
Czystszy kod? ... Dlaczego po prostu nie zwrócić testu indexOf, zamiast umieszczać go w całkowicie bezużytecznej wstępnej instrukcji IF.
James

4
Zgadzam się z JP. Być może napisałeś poprawne rozwiązanie, ale Twój kod jest naprawdę niechlujny. Gdzie jesteś kręcone szelki? Powinieneś przeczytać „Dobre części”, gdzie udowodniono, że kod napisany w stylu bez nawiasów klamrowych zawodzi w pewnych warunkach i powoduje zamieszanie podczas konserwacji.

2
url.indexOf (field + '=')! = -1 chyba wystarczyło. Nie ma znaczenia, czy jest na początku, czy nie
yyy,

2
@yyy Nie było. Jeśli masz ciąg zapytania, taki jak ?kodiaq=1, to wywołanie go url.indexOf('q=')bez poprzedzania go przedrostkiem &lub ?mogłoby doprowadzić do przekonania, że qparametr jest obecny.
michalstanko

115

Możesz też użyć wyrażenia regularnego:

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

1
faktycznie byłoby to bardziej podobne do: if (! new RegExp ("[? &] hfPageToken ="). test (s.data)) // jeśli dane hfPageToken nie są już obecne w żądaniu {s.data = s.data ? [s.data, tokenParam] .join („&”): tokenParam; }
Dragos Durlut

9
Dla wyjaśnienia, to działa świetnie if(/[?&]q=/.test(location.search)) { alert("match"); }(byłem trochę zdezorientowany komentarzem @DragosDurlut. :)
Leia

1
Yoda powiedziałby o wyrażeniach regularnych: „Krótszy kod, którego są .. łatwiejszy do odczytania, nie jest”.
RayLoveless


9

Przykładowy zwykły kod javascript, który dosłownie odpowiada na Twoje pytanie:

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

Przykładowy zwykły kod JavaScript, który próbuje ustalić, czy parametr q istnieje i czy ma wartość:

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
Pierwszy przykład zwróci prawdę dlafooq=bar
mickadoo

4

jeszcze jeden wariant, ale prawie taki sam jak rozwiązanie Gumbos:

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

3

ta funkcja pomoże Ci pobrać parametr z adresu URL w JS

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


2

W nowoczesnych przeglądarkach stało się to o wiele łatwiejsze dzięki URLSearchParams interfejsowi. Definiuje wiele metod narzędziowych do pracy z ciągiem zapytania adresu URL.

Zakładając, że nasz adres URL to https://example.com/?product=shirt&color=blue&newuser&size=m, możesz pobrać ciąg zapytania za pomocą window.location.search:

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

Następnie możesz przeanalizować parametry ciągu zapytania za pomocą URLSearchParams:

const urlParams = new URLSearchParams(queryString);

Następnie możesz wywołać dowolną z jego metod na wyniku.

Na przykład URLSearchParams.get()zwróci pierwszą wartość skojarzoną z podanym parametrem wyszukiwania:

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

Możesz użyć, URLSearchParams.has()aby sprawdzić, czy istnieje określony parametr:

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

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

Aby dowiedzieć się więcej, kliknij tutaj .


0

Wcześniej korzystałem z tej biblioteki, która całkiem nieźle radzi sobie z tym, czego szukasz. Konkretnie:-

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

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

0

To powinno pomóc:

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 {};
    }
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.