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

176

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

alert(window.location.href);

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

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

вместо того

http://mysite.com/somedir/somefile/?foo=bar&loo=goo
Тайлер
источник
возможный дубликат удаления строки запроса из URL
Алекс Ангас

Ответы:

283

Это возможно, но вам придется построить его вручную из locationобъекта :

location.protocol + '//' + location.host + location.pathname
lonesomeday
источник
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("?"));
Headshota
источник
3
Это предполагает, что этот параметр определен. Намного лучше этоurl.split('?')[0]
actimel
5

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

микрофон
источник
5

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

location.origin + location.pathname
AamirR
источник
2

Если вы посмотрите на документацию, вы можете взять только интересующие вас свойства из windowобъекта, т.е.

protocol + '//' + hostname + pathname
planetjones
источник