Saya memiliki URL dengan beberapa parameter GET sebagai berikut:
www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5
Saya perlu mendapatkan seluruh nilai c
. Saya mencoba membaca URL, tetapi saya hanya mendapatkannya m2
. Bagaimana saya melakukan ini menggunakan JavaScript?
Jawaban:
JavaScript sendiri tidak memiliki bawaan untuk menangani parameter string kueri.
Kode yang berjalan di browser (modern) Anda dapat menggunakan
URL
objek (yang merupakan bagian dari API yang disediakan oleh browser ke JS):Untuk browser yang lebih lama (termasuk Internet Explorer), Anda dapat menggunakan polyfill ini atau kode dari versi asli dari jawaban ini yang ada sebelum
URL
:Anda dapat mengakses
location.search
, yang akan memberi Anda dari?
karakter ke akhir URL atau awal pengidentifikasi fragmen (#foo), mana yang lebih dulu.Maka Anda dapat menguraikannya dengan ini:
Anda bisa mendapatkan string kueri dari URL halaman saat ini dengan:
sumber
URL
tambahan untuk perambanURLSearchParams
. Atau Anda dapat menghindari masalah ini dengan mengganti barisvar c = url.searchParams.get("c");
pada jawaban di atas denganvar c = new URLSearchParams(window.location.search).get("c");
.new URL()
mengharapkan untuk menerima URL yang disandikan dengan benar sebagai argumennya.decodeURIComponent
mengharapkan untuk lulus komponen URL, bukan keseluruhan URL.decodeURIComponent
tidak boleh digunakan dalam kasus iniparse_query_string
fungsi melakukan double-decode darivalue
. Yang=
dikeluarkan disebutkan oleh @ManelClos dapat diatasi dengan menambahkan parameter kedua2
(limit
) kevars[i].split()
.Sebagian besar implementasi yang saya lihat kehilangan URL-decoding nama dan nilai.
Berikut adalah fungsi utilitas umum yang juga melakukan decoding URL yang benar:
sumber
qs.split('+').join(' ');
dan tidakqs.replace(/\+/g, ' ');
?sumber
sumber
Ini adalah cara mudah untuk memeriksa hanya satu parameter:
URL contoh:
Contoh Javascript:
jika "myParam" ada di URL ... variabel myParam akan berisi "2", jika tidak maka itu tidak akan ditentukan.
Mungkin Anda menginginkan nilai default, dalam hal ini:
Pembaruan: Ini berfungsi lebih baik:
Dan itu berfungsi dengan baik bahkan ketika URL penuh dengan parameter.
sumber
http://myserver/action?myParam=2&anotherParam=3
akan menghasilkan"2"
tetapi"2&anotherParam=3"
.(location.search.split('myParam=')[1]||'').split('&')[0]
- untuk digunakan dengan beberapa param atau mungkin tidak adamyParam
.location.search.split('myParam=').splice(1).join('').split('&')[0]
[?|&]
seperti dalam[?|&]myParam=([^&]+)
result = decodeURIComponent(result);
Vendor browser telah menerapkan cara asli untuk melakukan ini melalui URL dan URLSearchParams.
Saat ini didukung di Firefox, Opera, Safari, Chrome dan Edge. Untuk daftar dukungan browser lihat di sini .
https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams https://developer.mozilla.org/en-US/docs/Web/API/URL/URL
https://url.spec.whatwg.org/
Eric Bidelman, seorang insinyur di Google, merekomendasikan untuk menggunakan polyfill ini untuk browser yang tidak didukung.
sumber
new URLSearchParams("www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5").get('a')
kembalinull
untukku? (Di Chrome stabil).b
danc
sepertinya bekerja dengan baik.url.searchParams
sebagai gantinyanew URLSearchParams(url.search)
.Saya menemukan ini berabad-abad yang lalu, sangat mudah:
Kemudian panggil seperti ini:
sumber
decodeURIComponent()
nilai, karena itulah yang biasanya ingin Anda kerjakan; gunakanwindow.location.search
alih-alihwindow.location.href
, karena Anda hanya tertarik pada parameter, bukan keseluruhan url.var vars = {}; window.location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) { vars[key] = value; }); return vars;
Anda bisa mendapatkan string kueri
location.search
, lalu Anda bisa membagi semuanya setelah tanda tanya:sumber
?array[]=1&array[]=2
menghasilkan{"array[]": "2"}
, yang jelas salah.[]
pola hanya memiliki arti dalam beberapa kasus (misalnya, PHP), tetapi tidak yang lain. Jadi bukan "jelas salah" - hanya saja tidak diterapkan untuk menangani kasus non-standar yang Anda mungkin perlu atau mungkin tidak perlu ditangani.Saya menulis solusi yang lebih sederhana dan elegan.
sumber
[0-9]
untuk\d
Cara super sederhana menggunakan URLSearchParams .
Saat ini didukung di Chrome, Firefox, Safari, Edge, dan lainnya .
sumber
Berikut ini adalah solusi rekursif yang tidak memiliki regex, dan memiliki mutasi minimal (hanya objek params yang dimutasi, yang saya percaya tidak dapat dihindari dalam JS).
Ini luar biasa karena:
Kode:
sumber
Saya membuat fungsi yang melakukan ini:
Pembaruan 5/26/2017, berikut adalah implementasi ES7 (berjalan dengan babel preset stage 0, 1, 2, atau 3):
Beberapa tes:
Pembaruan 3/26/2018, berikut ini adalah implementasi Script:
Pembaruan 2/13/2019, berikut ini adalah implementasi TypeScript yang diperbarui yang bekerja dengan TypeScript 3.
sumber
Object {"": ""}
Lihat ini
sumber
Solusi ECMAScript 6:
sumber
function urlParams(url) { const [, searchParams = ''] = url.split('?') return searchParams.split('&') .map(v => v.split('=')) .reduce((map, [key = '', value]) => key.length ? map.set(key, decodeURIComponent(value)) : map, new Map())
}saya menggunakan
sumber
window.location.search
tidak akan menyertakan hash like#id
.location.href
untuk mencocokkan hasilnya, bukan.location.search
Terima kasih.Saya menggunakan parseUri library. Ini memungkinkan Anda untuk melakukan persis apa yang Anda minta:
sumber
Ini solusinya. Seperti yang disarankan oleh Andy E saat menjawab pertanyaan ini , itu tidak baik untuk kinerja skrip Anda jika berulang kali membangun berbagai string regex, menjalankan loop dll hanya untuk mendapatkan nilai tunggal. Jadi, saya telah membuat skrip sederhana yang mengembalikan semua parameter GET dalam satu objek. Anda harus memanggilnya sekali saja, menetapkan hasilnya ke variabel dan kemudian, pada titik mana pun di masa depan, dapatkan nilai apa pun yang Anda inginkan dari variabel itu menggunakan kunci yang sesuai. Perhatikan bahwa ini juga menangani penguraian URI (mis. Hal-hal seperti% 20) dan menggantikan + dengan spasi:
Jadi, berikut adalah beberapa tes naskah untuk Anda lihat:
sumber
Atau jika Anda tidak ingin menemukan kembali roda parsing URI gunakan URI.js
Untuk mendapatkan nilai parameter bernama foo:
Apa yang dilakukan adalah
(lewat true memberitahu itu untuk menampilkan objek)
Ini biola untuk ini .... http://jsfiddle.net/m6tett01/12/
sumber
Untuk Nilai Parameter Tunggal seperti ini index.html? Msg = 1 gunakan kode berikut,
Untuk Semua Nilai Parameter, gunakan Kode berikut,
sumber
Di sini saya memposting satu contoh. Tapi itu di jQuery. Semoga ini bisa membantu orang lain:
sumber
Cara terpendek:
sumber
new URL(location.href).searchParams.get("my_key")
lebihURLSearchParams
karena yang terakhir akan gagal ketika mengambil parameter kueri pertama dari URL apa pun.pertanyaan ini memiliki terlalu banyak jawaban, jadi saya menambahkan yang lain.
pemakaian:
ini mengatasi dengan parameter kosong (kunci-kunci itu ada tanpa
"=value"
), pemaparan API pengambilan nilai skalar dan berbasis array, serta decoding komponen URI yang tepat.sumber
Cara termudah menggunakan
replace()
metode ini:Dari
urlStr
string:atau dari URL saat ini :
Penjelasan:
document.URL
- antarmuka mengembalikan lokasi dokumen (url halaman) sebagai string.replace()
- Metode mengembalikan string baru dengan beberapa atau semua kecocokan pola diganti oleh pengganti ./.*param_name=([^&]*).*/
- pola ekspresi reguler terlampir di antara garis miring yang berarti:.*
- nol atau lebih dari karakter apa pun,param_name=
- Nama param yang disisipkan,()
- grup dalam ekspresi reguler,[^&]*
- satu atau lebih dari karakter apa pun kecuali&
,|
- pergantian,$1
- referensi ke grup pertama dalam ekspresi reguler.sumber
Namun saran lain.
Sudah ada beberapa jawaban bagus, tetapi saya mendapati mereka tidak perlu rumit dan sulit untuk dipahami. Ini pendek, sederhana, dan mengembalikan array asosiatif sederhana dengan nama kunci yang sesuai dengan nama token di URL.
Saya menambahkan versi dengan komentar di bawah ini untuk mereka yang ingin belajar.
Perhatikan ini bergantung pada jQuery ($ .each) untuk loop-nya, yang saya sarankan daripada forEach. Saya merasa lebih mudah untuk memastikan kompatibilitas lintas-browser menggunakan jQuery di seluruh papan daripada menghubungkan dalam perbaikan individu untuk mendukung mana saja fungsi baru yang tidak didukung di browser yang lebih lama.
Sunting: Setelah saya menulis ini, saya perhatikan jawaban Eric Elliott, yang hampir sama, meskipun menggunakan forEach, sementara saya umumnya menentang (untuk alasan yang disebutkan di atas).
Versi yang dikomentari:
Untuk contoh di bawah ini kami akan menganggap alamat ini:
Anda dapat menetapkan token URL ke variabel Anda sendiri:
Kemudian lihat setiap token URL dengan nama seperti ini:
Ini akan mencetak "4".
Anda juga bisa langsung merujuk ke nama token dari fungsi secara langsung:
... yang akan mencetak "more".
sumber
Dapatkan dari sini: http://jquery-howto.blogspot.ru/2009/09/get-url-parameters-values-with-jquery.html
sumber
Cara sederhana
lalu panggil saja seperti getParams (url)
sumber
Saya harus membaca URL GET variabel dan menyelesaikan tindakan berdasarkan parameter url. Saya mencari-cari solusi tinggi dan menemukan sepotong kode ini. Ini pada dasarnya membaca url halaman saat ini, melakukan beberapa ekspresi reguler pada URL kemudian menyimpan parameter url dalam array asosiatif, yang dapat kita akses dengan mudah.
Jadi sebagai contoh jika kita memiliki url berikut dengan javascript di bagian bawah di tempat.
Yang perlu kita lakukan untuk mendapatkan parameter id dan halaman adalah memanggil ini:
Kode tersebut akan:
sumber
sumber
Intisari dari Eldon McGuinness ini sejauh ini merupakan implementasi paling lengkap dari parser string kueri JavaScript yang telah saya lihat sejauh ini.
Sayangnya, ini ditulis sebagai plugin jQuery.
Saya menulis ulang untuk vanilla JS dan membuat beberapa peningkatan:
Lihat juga Fiddle ini .
sumber
Elegan, solusi gaya fungsional
Mari kita membuat objek yang berisi nama-nama param URL sebagai kunci, maka kita dapat dengan mudah mengekstrak parameter dengan namanya:
sumber
return
Inilah yang saya lakukan:
sumber