Bagaimana cara memeriksa apakah nilai string kueri ada melalui JavaScript?

97

Bagaimana cara memeriksa apakah string kueri berisi a q=di dalamnya menggunakan JavaScript atau jQuery?

mrblah
sumber
Ini mungkin bisa membantu juga: stackoverflow.com/a/12151322 - berisi informasi tentang URLSearchParams , misalnya: var url = new URLSearchParams(location.search); url.has("my_great_query");mengembalikan truejika string kueri itu ada di url Anda. Anda kemudian bisa mendapatkan nilainya dengan url.get("my_great_query");.
pengguna1063287

Jawaban:

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
LorenVS
sumber
7
Beberapa jalur pengembalian adalah pilihan pribadi, saya menggunakannya karena menurut saya jalur tersebut mengarah ke kode yang lebih bersih, karena membantu saya menghindari pernyataan if bersarang dan menunjukkan dengan tepat apa yang terjadi pada titik tertentu dalam kode. Sedangkan untuk kasus stict, kedua sisi kiri dan kanan akan selalu berupa angka, jadi apa perbedaan yang dibuat oleh peralihan ke operator kesetaraan yang ketat?
LorenVS
4
Kode bersih? ... Mengapa tidak mengembalikan tes indexOf, daripada menempatkannya dalam pernyataan IF awal yang sama sekali tidak berguna.
James
4
Saya setuju dengan JP. Anda mungkin telah menulis solusi yang benar, tetapi kode Anda benar-benar ceroboh. Di mana Anda menggunakan kawat gigi keriting? Anda harus membaca "Bagian yang Baik" di mana kode yang ditulis dengan gaya tanpa kurung kurawal terbukti gagal dalam kondisi tertentu dan menimbulkan kebingungan selama pemeliharaan.
2
url.indexOf (field + '=')! = -1 sudah cukup menurut saya. Tidak masalah apakah itu di awal atau tidak
yyy
2
@yyy Tidak. Jika Anda memiliki string kueri seperti ?kodiaq=1, maka memanggil url.indexOf('q=')tanpa awalan dengan &atau ?akan membuat Anda percaya bahwa qparameter ada.
michalstanko
115

Anda juga bisa menggunakan ekspresi reguler:

/[?&]q=/.test(location.search)
Gumbo
sumber
1
sebenarnya akan lebih seperti: if (! new RegExp ("[? &] hfPageToken ="). test (s.data)) // jika data hfPageToken belum ada dalam permintaan {s.data = s.data ? [s.data, tokenParam] .join ("&"): tokenParam; }
Dragos Durlut
9
Hanya untuk memperjelas, ini berfungsi dengan baik if(/[?&]q=/.test(location.search)) { alert("match"); }(saya agak bingung karena komentar @DragosDurlut. :)
Leia
1
Yoda akan berkata tentang ekspresi reguler: "Kode yang lebih pendek .. lebih mudah dibaca, bukan".
RayLoveless
24

Menggunakan URL:

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

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

}

EDIT: jika Anda sedih tentang kompatibilitas, saya sangat menyarankan https://github.com/medialize/URI.js/ .

Damien Roche
sumber
4
Bagus, tapi tidak ada dukungan IE.
UpTheCreek
1
@UpTheCek sayangnya muncul begitu. Saya harus menggantinya dengan versi yang kompatibel. Kita bisa bermimpi.
Damien Roche
9

Contoh kode javascript biasa yang menjawab pertanyaan Anda secara harfiah:

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

Contoh kode javascript biasa yang mencoba untuk menemukan apakah ada parameter q dan jika memiliki nilai:

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
sumber
7
Contoh pertama akan mengembalikan nilai true untukfooq=bar
mickadoo
4

satu varian lagi, tetapi hampir sama dengan solusi Gumbos:

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

fungsi ini membantu Anda mendapatkan parameter dari URL di JS

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

Di peramban modern, ini menjadi jauh lebih mudah, berkat URLSearchParamsantarmukanya. Ini mendefinisikan sejumlah metode utilitas untuk bekerja dengan string kueri URL.

Dengan asumsi bahwa URL kami adalah https://example.com/?product=shirt&color=blue&newuser&size=m, Anda dapat mengambil string kueri menggunakan window.location.search:

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

Anda kemudian dapat mengurai parameter string kueri menggunakan URLSearchParams:

const urlParams = new URLSearchParams(queryString);

Kemudian Anda dapat memanggil salah satu metodenya pada hasil.

Misalnya, URLSearchParams.get()akan mengembalikan nilai pertama yang terkait dengan parameter pencarian yang diberikan:

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

Anda dapat menggunakan URLSearchParams.has()untuk memeriksa apakah ada parameter tertentu:

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

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

Untuk bacaan lebih lanjut silahkan klik disini .

Plabon Dutta
sumber
0

Saya telah menggunakan perpustakaan ini sebelumnya yang melakukan pekerjaan yang cukup baik dari apa yang Anda cari. Secara khusus:-

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

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

Ini akan membantu:

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 {};
    }
}
Membunuh beralih
sumber