Bagaimana cara mendapatkan URL tanpa parameter dalam JavaScript?

176

Jika saya menggunakan:

alert(window.location.href);

Saya mendapatkan semuanya termasuk string kueri. Apakah ada cara untuk mendapatkan bagian url utama, misalnya:

http://mysite.com/somedir/somefile/

dari pada

http://mysite.com/somedir/somefile/?foo=bar&loo=goo
Tyler
sumber
kemungkinan duplikat Hapus kueri dari URL
Alex Angas

Jawaban:

283

Ini mungkin, tetapi Anda harus membuatnya secara manual dari locationobjek :

location.protocol + '//' + location.host + location.pathname
lonesomeday
sumber
14
Perhatikan bahwa Anda tidak perlu menyediakan location.protocol karena semua browser modern (termasuk IE6) akan secara otomatis mewarisi protokol saat ini. yaitu:'//' + location.host + location.pathname
JonnyReeves
10
@JonnyReeves Jika Anda menggunakannya dalam dokumen saat ini, itu benar: poin bagus. Ada saat-saat ketika mungkin diperlukan, misalnya jika mengeluarkan URL sebagai teks biasa.
lonesomeday
1
@lonesomeday respons Anda menyiratkan itu satu-satunya cara, yang bukan.
Oddman
5
Port tidak ada, jadi ini akan mengembalikan hasil yang salah untuk halamanhttp://www.example.com:8080/asdf.html?foo=bar
izogfif
3
Anda dapat menyimpan beberapa karakter dengan location.origin, yang saya percaya juga alamat perhatian @ izogfif.
Coderer
171

Setiap jawaban agak berbelit-belit. Sini:

var url = window.location.href.split('?')[0];

Bahkan jika a? tidak ada, masih akan mengembalikan argumen pertama, yang akan menjadi URL lengkap Anda, dikurangi string kueri.

Ini juga protokol-agnostik, artinya Anda bahkan bisa menggunakannya untuk hal-hal seperti ftp, itunes.etc.

Oddman
sumber
39
jika Anda perlu menghapus jangkarwindow.location.href.split(/[?#]/)[0];
Bahattin Ungormus
memang setiap jawaban agak berbelit
mehmet
@mehmet semua telinga jika Anda memiliki pendekatan yang lebih sederhana :)
Oddman
1
@Oddman, saya benar-benar tidak ingat apa yang saya pikirkan saat itu, tapi saya kira itu mungkin pernyataan afirmatif :))
mehmet
Mengapa (jika ya) jawaban ini lebih baik daripada jawaban yang ditandai diterima ??
Vishal - JAVA - CQ
16

Menggunakan indexOf

var url = "http://mysite.com/somedir/somefile/?aa";

if (url.indexOf("?")>-1){
url = url.substr(0,url.indexOf("?"));
}
Niklas
sumber
5
var url = "tp://mysite.com/somedir/somefile/?foo=bar&loo=goo"    

url.substring(0,url.indexOf("?"));
Headshota
sumber
3
Ini mengandaikan, parameter itu didefinisikan. Jauh lebih baik adalahurl.split('?')[0]
actimel
5

Anda dapat menggunakan ekspresi reguler: window.location.href.match(/^[^\#\?]+/)[0]

Mik
sumber
5

Anda dapat melakukan concat origindan pathname, jika ada port seperti itu example.com:80, itu akan dimasukkan juga.

location.origin + location.pathname
AamirR
sumber
2

Jika Anda melihat dokumentasi Anda bisa mengambil hanya properti yang Anda minati dari windowobjek yaitu

protocol + '//' + hostname + pathname
planetjones
sumber