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

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

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.


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

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

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

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]


5

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

location.origin + location.pathname

2

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

protocol + '//' + hostname + pathname
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.