Jak uzyskać adres URL bez żadnych parametrów w JavaScript?

176

Jeśli używam:

alert(window.location.href);

Otrzymuję wszystko, w tym ciągi zapytań. Czy istnieje sposób, aby uzyskać główną część adresu URL, na przykład:

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

zamiast

http://mysite.com/somedir/somefile/?foo=bar&loo=goo
Tyler
źródło
możliwy duplikat Usuń querystring z adresu URL
Alex Angas

Odpowiedzi:

283

Jest to możliwe, ale będziesz musiał zbudować go ręcznie z locationobiektu :

location.protocol + '//' + location.host + location.pathname
samotny dzień
źródło
14
Pamiętaj, że nie musisz podawać protokołu location.protocol, ponieważ wszystkie nowoczesne przeglądarki (w tym IE6) automatycznie odziedziczą bieżący protokół. tj .:'//' + location.host + location.pathname
JonnyReeves
10
@JonnyReeves Jeśli używasz go w bieżącym dokumencie, to prawda: dobra uwaga. Istnieją sytuacje, w których może to być konieczne, np. Przy wyświetlaniu adresu URL jako zwykłego tekstu.
lonesomeday
1
@lonesomeday Twoja odpowiedź sugeruje, że to jedyny sposób, a tak nie jest.
Oddman
5
Brakuje portu, więc to zwróci niepoprawny wynik dla stronyhttp://www.example.com:8080/asdf.html?foo=bar
izogfif
3
Możesz uratować kilka znaków location.origin, co moim zdaniem rozwiązuje również problem @ izogfif.
Coderer
171

Każda odpowiedź jest dość zawiła. Tutaj:

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

Nawet jeśli? nie występuje, nadal zwróci pierwszy argument, którym będzie pełny adres URL pomniejszony o ciąg zapytania.

Jest również niezależny od protokołu, co oznacza, że ​​możesz go nawet używać do rzeczy takich jak ftp, itunes.etc.

Dziwny człowiek
źródło
39
na wypadek konieczności usunięcia kotwicwindow.location.href.split(/[?#]/)[0];
Bahattin Ungormus
w istocie każda odpowiedź jest raczej zawiła
mehmet
@mehmet wszystkie uszy, jeśli masz prostsze podejście :)
Oddman
1
@Oddman, absolutnie nie pamiętam, o czym wtedy myślałem, ale myślę, że to może być stwierdzenie twierdzące :))
mehmet
Dlaczego (jeśli tak) ta odpowiedź jest lepsza niż ta oznaczona jako zaakceptowana?
Vishal - JAVA - CQ
16

Posługiwać się indexOf

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

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

url.substring(0,url.indexOf("?"));
Headshota
źródło
3
To zakłada, że ​​parametr jest zdefiniowany. Znacznie lepiejurl.split('?')[0]
actimel
5

Możesz użyć wyrażenia regularnego: window.location.href.match(/^[^\#\?]+/)[0]

Mic
źródło
5

Możesz połączyć origini pathname, jeśli istnieje port, taki jak example.com:80, to również zostanie uwzględnione.

location.origin + location.pathname
AamirR
źródło
2

Jeśli spojrzysz na dokumentację , możesz pobrać tylko interesujące Cię właściwości z windowobiektu, tj

protocol + '//' + hostname + pathname
planetjones
źródło