JavaScript aracılığıyla bir sorgu dizesi değerinin mevcut olup olmadığı nasıl kontrol edilir?


97

q=JavaScript veya jQuery kullanarak sorgu dizesinin içinde a içerip içermediğini nasıl kontrol edebilirim ?


Bu da yardımcı olabilir: stackoverflow.com/a/12151322 - URLSearchParams hakkında bilgi içerir , örneğin: bu sorgu dizesi url'nizde bulunuyorsavar url = new URLSearchParams(location.search); url.has("my_great_query"); döner true. Daha sonra değerini alabilirsiniz url.get("my_great_query");.
user1063287

Yanıtlar:


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
Çoklu dönüş yolları kişisel bir tercihtir, onları kullanıyorum çünkü daha temiz bir koda yol açıyorlar, çünkü iç içe geçmiş ifadelerden kaçınmama yardımcı oluyorlar ve kodun belirli bir noktasında tam olarak neler olup bittiğini gösteriyorlar. Stict vakalarına gelince, hem sol hem de sağ taraf her zaman sayı olacaktır, öyleyse katı eşitlik operatörlerine geçmek ne fark eder?
LorenVS

4
Daha temiz kod mu? ... Neden tamamen yararsız bir ön EĞER ifadesine yerleştirmek yerine indexOf testini döndürmüyorsunuz?
James

4
JP'ye katılıyorum. Doğru çözümü yazmış olabilirsiniz, ancak kodunuz gerçekten özensiz. Küme parantez nerede? Küme parantezleri olmadan bir stil yazılan kodun belirli koşullar altında başarısız olduğu ve bakım sırasında karışıklığa neden olduğu "The Good Parts" bölümünü okumalısınız.

2
url.indexOf (alan + '=')! = -1 yeterliydi sanırım. Başlangıçta olup olmaması önemli değil
yyy

2
@yyy Hayır değildi. Eğer gibi bir sorgu dizeniz varsa, önekini koymadan ?kodiaq=1çağırmak veya parametrenin mevcut olduğuna inanmanıza neden olur . url.indexOf('q=')&?q
michalstanko

115

Ayrıca normal bir ifade de kullanabilirsiniz:

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

1
aslında daha çok şuna benzer: if (! new RegExp ("[? &] hfPageToken ="). test (s.data)) // hfPageToken verileri istekte zaten mevcut değilse {s.data = s.data ? [s.data, tokenParam] .join ("&"): tokenParam; }
Dragos Durlut

9
Sadece açıklığa kavuşturmak için, bu harika çalışıyor if(/[?&]q=/.test(location.search)) { alert("match"); }(@DragosDurlut yorumu yüzünden biraz kafam karıştı. :)
Leia

1
Yoda, normal ifadelerle ilgili olarak şunu söylerdi: "Daha kısa kodlar ... okunması daha kolay değiller".
RayLoveless


9

Sorunuzu tam anlamıyla yanıtlayan basit javascript kodu örneği:

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

Q parametresinin var olup olmadığını ve bir değeri olup olmadığını bulmaya çalışan düz javascript kodu örneği:

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
İlk örnek şu tarih için doğru olacakfooq=bar
mickadoo

4

bir varyant daha, ancak neredeyse Gumbos çözümüyle aynı:

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

3

bu işlev, JS'deki URL'den parametre almanıza yardımcı olur

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


2

Modern tarayıcılarda, URLSearchParamsarayüz sayesinde bu çok daha kolay hale geldi . Bu, bir URL'nin sorgu dizesiyle çalışmak için bir dizi yardımcı program yöntemi tanımlar.

URL'mizin olduğunu varsayarsak, şunu https://example.com/?product=shirt&color=blue&newuser&size=mkullanarak sorgu dizesini alabilirsiniz window.location.search:

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

Daha sonra sorgu dizesinin parametrelerini şu şekilde ayrıştırabilirsiniz URLSearchParams:

const urlParams = new URLSearchParams(queryString);

Ardından, sonuç üzerinde herhangi bir yöntemini çağırabilirsiniz.

Örneğin URLSearchParams.get(), verilen arama parametresiyle ilişkili ilk değeri döndürür:

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

URLSearchParams.has()Belirli bir parametrenin var olup olmadığını kontrol etmek için kullanabilirsiniz :

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

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

Daha fazla okumak için lütfen buraya tıklayın .


0

Daha önce bu kütüphaneyi kullandım, bu da peşinde olduğunuz şey için oldukça iyi bir iş çıkarıyor. Özellikle: -

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

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

0

Bu yardımcı olmalı:

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 {};
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.