Як отримати URL-адресу без будь-яких параметрів у JavaScript?


176

Якщо я використовую:

alert(window.location.href);

Я отримую все, включаючи рядки запитів. Чи є спосіб отримати головну частину URL-адреси, наприклад:

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

замість

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

можливий дублікат Remove querystring from URL
Alex Angas

Відповіді:


283

Це можливо, але вам доведеться побудувати його вручну з locationоб’єкта :

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

14
Зауважте, що вам не потрібно надавати location.protocol, оскільки всі сучасні браузери (включаючи IE6) автоматично успадковують поточний протокол. тобто:'//' + location.host + location.pathname
JonnyReeves

10
@JonnyReeves Якщо ви використовуєте його в поточному документі, це правда: хороший момент. Бувають випадки, коли це може знадобитися, наприклад, якщо виводиться URL у вигляді простого тексту.
самотній день

1
@lonesomeday ваша відповідь передбачає, що це єдиний спосіб, який це не так.
Оддман

5
У ньому відсутній порт, тому це поверне неправильний результат для сторінкиhttp://www.example.com:8080/asdf.html?foo=bar
izogfif

3
Ви можете зберегти кілька символів location.origin, які, на мою думку, також стосуються проблеми @ izogfif.
Coderer

171

Кожна відповідь доволі суперечлива. Тут:

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

Навіть якщо a? немає, він все одно поверне перший аргумент, який буде повною URL-адресою, мінус рядком запиту.

Це також протокольно-агностичний, тобто ви можете навіть використовувати його для таких речей, як ftp, itunes.etc.


39
у випадку, якщо вам потрібно буде зняти якірwindow.location.href.split(/[?#]/)[0];
Bahattin Ungormus

насправді кожна відповідь доволі суперечлива
mehmet

@mehmet всі вуха, якщо у вас більш простий підхід :)
Оддман

1
@Oddman, я абсолютно не пам'ятаю, про що я тоді думав, але, мабуть, це може бути стверджувальним твердженням :))
mehmet

Чому (якщо вона є) ця відповідь краща за прийняту ??
Vishal - JAVA - CQ

16

Використовуйте indexOf

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

if (url.indexOf("?")>-1){
url = url.substr(0,url.indexOf("?"));
}

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

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

3
Це передбачає, що цей параметр визначений. Набагато кращеurl.split('?')[0]
actimel

5

Ви можете використовувати регулярний вираз: window.location.href.match(/^[^\#\?]+/)[0]


5

Ви можете присвоїти originі pathname, якщо є такий порт, як example.com:80, він буде також включений.

location.origin + location.pathname

2

Якщо ви подивитесь на документацію, ви можете взяти з windowоб’єкта саме ті властивості, які вас цікавлять, тобто

protocol + '//' + hostname + pathname
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.