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

Odpowiedzi:


283

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

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

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.


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("?"));
}

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

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

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]


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

2

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

protocol + '//' + hostname + pathname
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.