จะรับ URL ที่ไม่มีพารามิเตอร์ใด ๆ ใน JavaScript ได้อย่างไร


176

ถ้าฉันใช้:

alert(window.location.href);

ฉันได้รับทุกอย่างรวมถึงสตริงการสืบค้น มีวิธีที่จะได้รับส่วน URL หลักเช่น:

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

แทน

http://mysite.com/somedir/somefile/?foo=bar&loo=goo

อาจเป็นไปได้ซ้ำกับการลบการสอบถามออกจาก URL
Alex Angas

คำตอบ:


283

สิ่งนี้เป็นไปได้ แต่คุณจะต้องสร้างมันเองจากlocationวัตถุ :

location.protocol + '//' + location.host + location.pathname

14
โปรดทราบว่าคุณไม่จำเป็นต้องระบุ location.protocol เนื่องจากเบราว์เซอร์สมัยใหม่ทั้งหมด (รวมถึง IE6) จะสืบทอดโปรโตคอลปัจจุบันโดยอัตโนมัติ เช่น:'//' + location.host + location.pathname
JonnyReeves

10
@ JonnyReeves หากคุณใช้ในเอกสารปัจจุบันนั่นเป็นความจริง: ข้อดี มีหลายครั้งที่มันอาจจำเป็นเช่นถ้าเอาท์พุท URL เป็นข้อความธรรมดา
lonesomeday

1
@lonesomeday คำตอบของคุณบอกเป็นนัยทางเดียวซึ่งไม่ใช่
Oddman

5
มันไม่มีพอร์ตดังนั้นสิ่งนี้จะส่งคืนผลลัพธ์ที่ไม่ถูกต้องสำหรับหน้าhttp://www.example.com:8080/asdf.html?foo=bar
izogfif

3
คุณสามารถบันทึกตัวละครได้ไม่กี่ตัวด้วยlocation.originซึ่งฉันเชื่อว่าจะช่วยแก้ไขปัญหาที่ @ izogfif
Coderer

171

ทุกคำตอบค่อนข้างซับซ้อน ที่นี่:

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

แม้ว่า ไม่มีอยู่มันจะยังคงส่งคืนอาร์กิวเมนต์แรกซึ่งจะเป็น URL แบบเต็มของคุณลบด้วยสตริงข้อความค้นหา

นอกจากนี้ยังเป็นโปรโตคอลที่ไม่เชื่อเรื่องพระเจ้าซึ่งหมายความว่าคุณสามารถใช้กับสิ่งต่างๆเช่น ftp, itunes.etc


39
ในกรณีที่คุณจำเป็นต้องลบจุดยึดwindow.location.href.split(/[?#]/)[0];
Bahattin Ungormus

แน่นอนทุกคำตอบค่อนข้างซับซ้อน
เมห์เม็ต

@mehmet หูของทุกคนถ้าคุณมีวิธีการที่เรียบง่าย :)
Oddman

1
@Oddman ผมอย่างไม่จำสิ่งที่ฉันคิดแล้ว แต่ผมเดาว่าอาจจะมีคำสั่งยืนยัน :))
เมห์เม็ต

ทำไม (ถ้ามี) คำตอบนี้ดีกว่าคำตอบที่ยอมรับได้?
Vishal - JAVA - CQ


5
var url = "tp://mysite.com/somedir/somefile/?foo=bar&loo=goo"    

url.substring(0,url.indexOf("?"));

3
ทึกทักเอาว่าพารามิเตอร์นั้นถูกกำหนดไว้ ดีกว่ามากคือurl.split('?')[0]
actimel


5

คุณสามารถตกลงoriginและpathnameหากมีพอร์ตเช่นexample.com:80นั้นจะรวมอยู่ด้วย

location.origin + location.pathname

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.