Как получить URL без каких-либо параметров в JavaScript?


176

Если я использую:

alert(window.location.href);

Я получаю все, включая строки запроса. Есть ли способ просто получить основную часть URL, например:

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

вместо того

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

Ответы:


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];

Даже если? отсутствует, он по-прежнему будет возвращать первый аргумент, который будет вашим полным URL, за исключением строки запроса.

Это также не зависит от протокола, то есть вы даже можете использовать его для таких вещей, как ftp, itunes.etc.


39
в случае, если вам нужно снять якоряwindow.location.href.split(/[?#]/)[0];
Бахаттин Унгормус

действительно, каждый ответ довольно запутанный
mehmet

@ mehmet все уши, если у вас есть более простой подход :)
Oddman

1
@ Странно, я совершенно не помню, о чем думал, но думаю, это может быть утвердительным утверждением :))
mehmet

Почему (если это так) этот ответ лучше, чем тот, который отмечен как принятый?
Вишал - Джава - 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

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

location.origin + location.pathname

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.