Como obter o URL sem nenhum parâmetro em JavaScript?

176

Se eu usar:

alert(window.location.href);

Eu recebo tudo, incluindo cadeias de consulta. Existe uma maneira de obter apenas a parte principal do URL, por exemplo:

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

ao invés de

http://mysite.com/somedir/somefile/?foo=bar&loo=goo
Tyler
fonte
possível duplicata de Remove querystring de URL
Alex Angas

Respostas:

283

Isso é possível, mas você precisará compilá-lo manualmente a partir do locationobjeto :

location.protocol + '//' + location.host + location.pathname
lonesomeday
fonte
14
Observe que você não precisa fornecer o protocolo location.protocol, pois todos os navegadores modernos (incluindo o IE6) herdarão automaticamente o protocolo atual. ou seja:'//' + location.host + location.pathname
JonnyReeves 14/02
10
@ JonnyReeves Se você o estiver usando no documento atual, isso é verdade: bom ponto. Há ocasiões em que isso pode ser necessário, por exemplo, se você estiver exibindo a URL como texto sem formatação.
Loneomeday
1
@lonesomeday sua resposta implica que é a única maneira, o que não é.
Oddman
5
Está faltando porta, portanto, isso retornará resultado incorreto para a páginahttp://www.example.com:8080/asdf.html?foo=bar
izogfif
3
Você pode salvar alguns caracteres location.origin, os quais, acredito, também abordam a preocupação de @ izogfif.
precisa saber é o seguinte
171

Toda resposta é bastante complicada. Aqui:

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

Mesmo se um? não estiver presente, ele ainda retornará o primeiro argumento, que será seu URL completo, menos a string de consulta.

Também é independente de protocolo, o que significa que você pode usá-lo para coisas como ftp, itunes.etc.

Homem estranho
fonte
39
no caso de você precisar remover as âncoraswindow.location.href.split(/[?#]/)[0];
Bahattin Ungormus
na verdade, cada resposta é bastante complicado
mehmet
@mehmet todos os ouvidos se você tiver uma abordagem mais simples :)
Oddman 11/03
1
@ Oddman, absolutamente não me lembro do que estava pensando, mas acho que pode ser uma afirmação afirmativa :))
mehmet 12/03
Por que (se é) essa resposta é melhor do que a marcada como aceita?
Vishal - JAVA - CQ
16

Usar indexOf

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

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

url.substring(0,url.indexOf("?"));
Headshota
fonte
3
Isso pressupõe que esse parâmetro esteja definido. Muito melhor éurl.split('?')[0]
actimel
5

Você pode usar uma expressão regular: window.location.href.match(/^[^\#\?]+/)[0]

Microfone
fonte
5

Você pode concat origine pathname, se houver uma porta como essa example.com:80, também será incluída.

location.origin + location.pathname
AamirR
fonte
2

Se você olhar para a documentação, poderá obter apenas do windowobjeto as propriedades das quais está interessado .

protocol + '//' + hostname + pathname
planetjones
fonte