Apakah ada cara yang lebih baik untuk menghapus parameter dari string kueri dalam string URL dalam JavaScript standar selain dengan menggunakan ekspresi reguler?
Inilah yang saya buat sejauh ini yang tampaknya berhasil dalam tes saya, tetapi saya tidak suka menemukan parsing querystring!
function RemoveParameterFromUrl( url, parameter ) {
if( typeof parameter == "undefined" || parameter == null || parameter == "" ) throw new Error( "parameter is required" );
url = url.replace( new RegExp( "\\b" + parameter + "=[^&;]+[&;]?", "gi" ), "" ); "$1" );
// remove any leftover crud
url = url.replace( /[&;]$/, "" );
return url;
}
javascript
query-string
Matthew Lock
sumber
sumber
url= urlparts[0]+'?'+pars.join('&');
keurl= urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : "");
Browser modern menyediakan
URLSearchParams
antarmuka untuk bekerja dengan params pencarian. Yang memilikidelete
metode yang menghapus param dengan nama.sumber
URLSearchParams
tidak didukung oleh IE, Edge 16 dan iOS 10.2 Safari. (ref: caniuse.com/#feat=urlsearchparams )Disalin dari jawaban bobince, tetapi membuatnya mendukung tanda tanya di string kueri, mis
http://www.google.com/search?q=test???+something&aq=f
Apakah valid untuk memiliki lebih dari satu tanda tanya di URL?
sumber
???
ini adalah sintaks yang tidak valid dan seharusnya tidak pernah muncul di URL`.return url.endsWith("?") ? url.slice(0,-1) : url;
untuk menutupi kasus di mana parameter yang akan dihapus adalah satu-satunya di string kueriSaya tidak melihat masalah besar dengan solusi regex. Tapi, jangan lupa untuk menyimpan pengidentifikasi fragmen (teks setelah
#
).Inilah solusi saya:
Dan untuk poin bobince, ya - Anda harus melarikan diri
.
karakter dalam nama parameter.sumber
url.replace(new RegExp('^([^#]*\?)(([^#]*)&)?' + parameter + '(\=[^&#]*)?(&|#|$)' ), '$1$3$5').replace(/^([^#]*)((\?)&|\?(#|$))/,'$1$3$4')
Anda dapat mengubah URL dengan:
dengan cara ini, Anda dapat menimpa URL tanpa parameter pencarian, saya menggunakannya untuk membersihkan URL setelah mengambil parameter GET.
sumber
Siapa pun yang tertarik pada solusi regex Saya telah mengumpulkan fungsi ini untuk menambah / menghapus / memperbarui parameter querystring. Tidak memberikan nilai akan menghapus parameter, memasok satu akan menambah / memperbarui paramter. Jika tidak ada URL yang diberikan, itu akan diambil dari window.location. Solusi ini juga mempertimbangkan jangkar url.
MEMPERBARUI
Ada bug ketika menghapus parameter pertama dalam querystring, saya telah mengerjakan ulang regex dan tes untuk menyertakan perbaikan.
PEMBARUAN 2
Pembaruan @schellmax untuk memperbaiki situasi di mana simbol tagar hilang ketika menghapus variabel querystring langsung sebelum tagar
sumber
UpdateQueryString('a', null, 'http://www.test.com?a=b#c');
url
untuk setiap iterasi penggantian. Tapi, itu berarti Anda harus memasukkanvalue
argumen, yang akan membuat setengah querystring dihapus. Untuk mengatasi ini, gunakanundefined
ataunull
untukvalue
argumen seperti:url_from_last_iteration = UpdateQueryString(current_ignore_key, undefined/null, url_from_last_iteration);
Dengan asumsi Anda ingin menghapus key = val parameter dari URI:
sumber
/([&?]key=val*$|key=val&|[?&]key=val(?=#))/
mungkin lebih disukai ketika menggunakan linter seperti eslintInilah yang saya gunakan:
URL asli: http://www.example.com/test/hello?id=123&foo=bar
URL Tujuan: http://www.example.com/test/hello
sumber
Inilah fungsi lengkap untuk menambah dan menghapus parameter berdasarkan pertanyaan ini dan inti github ini: https://gist.github.com/excalq/2961415
Anda dapat menambahkan parameter seperti ini:
Dan hapus seperti ini:
Di utas ini banyak yang mengatakan bahwa regex mungkin bukan solusi terbaik / stabil ... jadi saya tidak 100% yakin jika hal ini memiliki beberapa kekurangan tetapi sejauh yang saya uji itu berfungsi cukup baik.
sumber
Ini adalah versi bersih menghapus parameter kueri dengan kelas URL untuk browser hari ini:
URLSearchParams tidak didukung di browser lama
https://caniuse.com/#feat=urlsearchparams
IE, Edge (di bawah 17) dan Safari (di bawah 10.3) tidak mendukung URLSearchParams di dalam kelas URL.
Polyfill
URLSearchParams hanya polyfill
https://github.com/WebReflection/url-search-params
Lengkapi URL Polyfill dan URLSearchParams agar sesuai dengan spesifikasi WHATWG terakhir
https://github.com/lifaon74/url-polyfill
sumber
Menggunakan jQuery:
sumber
Versi di atas sebagai fungsi
sumber
Anda harus menggunakan perpustakaan untuk melakukan manipulasi URI karena lebih rumit daripada yang terlihat di permukaan untuk melakukannya sendiri. Lihatlah: http://medialize.github.io/URI.js/
sumber
Dari apa yang saya lihat, tidak ada yang di atas dapat menangani parameter normal dan parameter array. Inilah yang melakukannya.
Bagaimana cara menggunakannya:
Tentu saja, untuk memperbarui parameter, hapus saja lalu tambahkan. Jangan ragu untuk membuat fungsi dummy untuk itu.
sumber
path.replace(new RegExp("&?"+param+"=[\\w]+", "g"), "");
Saya akan mengubah regex[\\w]*
untuk memasukkan parameter seperti "param =" tanpa nilai.Semua tanggapan di utas ini memiliki kelemahan karena tidak mempertahankan bagian-bagian URL yang tidak berlabuh / terpotong-potong.
Jadi jika URL Anda terlihat seperti:
dan Anda mengganti 'parameter'
Anda akan kehilangan teks fragmen Anda.
Berikut ini adalah adaptasi dari jawaban sebelumnya (bobince via LukePH) yang mengatasi masalah ini:
sumber
url = urlBase+'?'+pars.join('&');
keurl = urlBase + (pars.length > 0 ? '?' + pars.join('&') : "");
Berikut solusi yang:
?
dalam string kueri jika parameter terakhir dihapusCatatan: seperti yang ditunjukkan dalam jawaban lain, URLSearchParams tidak didukung di IE , jadi gunakan polyfill .
sumber
Jika ini adalah contoh dari
URL
, gunakandelete
fungsisearchParams
sumber
jawaban langsung & sederhana lainnya adalah
sumber
Versi solusi yang dimodifikasi oleh ssh_imov
Panggil seperti ini
sumber
Ini mengembalikan URL tanpa Parameter APA PUN:
sumber
Saya praktis menulis fungsi berikut untuk memproses parameter url dan mendapatkan status akhir sebagai string dan mengarahkan ulang halaman. Semoga bermanfaat.
Misalnya, ketika saya mengklik tombol, saya ingin nilai halaman dihapus dan nilai kategori ditambahkan.
Saya pikir itu sangat berguna!
sumber
Senang Anda menggulir di sini.
Saya menyarankan Anda untuk menyelesaikan tugas ini dengan solusi yang mungkin berikutnya:
http://google.com/?myparm
http://google.com/?myparm=1
http://google.com?qp=1&qpqp=2&qp=1
for
loop dan tidak mengubah array selama pengulangan di atasnyaBekerja di IE> 9 (versi ES5)
Versi ES6 mewah
Lihat cara kerjanya di sini
sumber
sumber
sumber
Jika Anda menyukai jQuery, ada plugin manipulasi string kueri yang bagus:
sumber
sumber