Tenho URL como:, http://example.com#something
como faço para remover #something
, sem fazer com que a página seja atualizada?
Tentei a seguinte solução:
window.location.hash = '';
No entanto, isso não remove o símbolo de hash #
do URL.
javascript
window.location
fragment-identifier
Tom Lehman
fonte
fonte
Respostas:
Questão inicial:
ou
ambos retornarão o URL sem o hash ou qualquer coisa depois dele.
Com relação à sua edição:
Qualquer alteração em
window.location
irá acionar uma atualização da página. Você pode alterarwindow.location.hash
sem acionar a atualização (embora a janela salte se o seu hash corresponder a um ID na página), mas você não poderá se livrar do sinal de hash. Faça a sua escolha para o que é pior ...RESPOSTA MAIS ATUALIZADA
A resposta certa sobre como fazê-lo sem sacrificar (recarregar completamente ou deixar o sinal de hash lá) está aqui embaixo . Deixando essa resposta aqui, porém, em relação a ser a original em 2009, a correta que utiliza novas APIs de navegador foi dada 1,5 anos depois.
fonte
A solução desse problema está muito mais ao alcance hoje em dia. A API de histórico do HTML5 nos permite manipular a barra de localização para exibir qualquer URL no domínio atual.
Demonstração de trabalho: http://jsfiddle.net/AndyE/ycmPt/show/
Isso funciona no Chrome 9, Firefox 4, Safari 5, Opera 11.50 e no IE 10. Para navegadores não suportados, você sempre pode escrever um script degradante que o utilize sempre que disponível:
Assim, você pode se livrar do símbolo de hash, mas não em todos os navegadores - ainda.
Nota: se você deseja substituir a página atual no histórico do navegador, use em
replaceState()
vez depushState()
.fonte
(Muitas respostas são redundantes e desatualizadas.) A melhor solução agora é a seguinte:
fonte
history.pushState(null, null, ' ')
se você quiser preservar o histórico.null
pelos parâmetrosstate
etitle
faz.Simples e elegante:
fonte
.
vez de/
. Usar/
altera o URL para o caminho raiz.history.replaceState({}, document.title, location.href.substr(0, location.href.length-location.hash.length));
para o meu caso de uso.history.replaceState(null, document.title, location.pathname + location.search);
Para remover o hash, você pode tentar usar esta função
fonte
Isso removerá o hash à direita também. por exemplo: http://test.com/123#abc -> http://test.com/123
fonte
Que tal o seguinte?
window.location.hash=' '
Observe que estou configurando o hash para um espaço único e não para uma string vazia.
Definir o hash como uma âncora inválida também não causa atualização. Tal como,
window.location.hash='invalidtag'
Mas, acho a solução acima enganosa. Isso parece indicar que há uma âncora na posição fornecida com o nome dado, embora não exista. Ao mesmo tempo, o uso de uma string vazia faz com que a página seja movida para o topo, o que pode ser inaceitável às vezes. O uso de um espaço também garante que sempre que a URL for copiada, marcada e visitada novamente, a página geralmente estará na parte superior e o espaço será ignorado.
E, ei, esta é minha primeira resposta no StackOverflow. Espero que alguém ache útil e corresponda aos padrões da comunidade.
fonte
Você pode fazê-lo como abaixo:
history.replaceState({}, document.title, window.location.href.split('#')[0]);
fonte
fonte
coloque esse código na seção principal
fonte
fonte
Eu acho que seria mais seguro
fonte
Tente o seguinte:
fonte
Aqui está outra solução para alterar o local usando href e limpar o hash sem rolar.
A solução mágica é explicada aqui . Especificações aqui .
NOTA: A API proposta agora faz parte do WhatWG HTML Living Standard
fonte
fonte
Você pode substituir o hash por nulo
fonte