Estou tentando remover tudo após o "?" no URL do navegador no documento pronto.
Aqui está o que estou tentando:
jQuery(document).ready(function($) {
var url = window.location.href;
url = url.split('?')[0];
});
Eu posso fazer isso e vê-lo abaixo funciona:
jQuery(document).ready(function($) {
var url = window.location.href;
alert(url.split('?')[0]);
});
javascript
jquery
Derek
fonte
fonte
.ready()
? Você não precisa esperar para redirecionar para um novo URL ou apenas usar.pushState()
como recomendado por Joraid.Respostas:
TL; DR
1- Para modificar URL atual e adicionar / Inject -lo (o novo URL modificado) como uma nova entrada URL à lista história, uso
pushState
:2- Para substituir o URL atual sem adicioná- lo às entradas do histórico, use
replaceState
:3- Dependendo da sua lógica de negócios ,
pushState
será útil em casos como:você deseja apoiar o botão voltar do navegador
você deseja criar um novo URL, adicionar / inserir / enviar o novo URL às entradas do histórico e torná-lo atual
permitindo aos usuários marcar a página com os mesmos parâmetros (para mostrar o mesmo conteúdo)
acessar programaticamente os dados através da
stateObj
análise a partir da âncoraComo entendi pelo seu comentário, você deseja limpar seu URL sem redirecionar novamente.
Observe que você não pode alterar o URL inteiro. Você pode simplesmente mudar o que vem depois do nome do domínio. Isso significa que você não pode mudar,
www.example.com/
mas pode mudar o que vem depois.com/
fundo
Podemos usar:
1- O método pushState () se você deseja adicionar um novo URL modificado às entradas do histórico.
2- O método replaceState () se você deseja atualizar / substituir a entrada do histórico atual .
Código
Para fazer isso, usarei o método pushState () neste exemplo, que funciona de maneira semelhante ao seguinte formato:
Sinta-se livre para substituir
pushState
comreplaceState
base em suas necessidades.Você pode substituir o parâmetro
"object or string"
por{}
e"Title"
com,document.title
para que a declaração final se torne:Resultados
As duas linhas de código anteriores criarão uma URL como:
Tornar-se:
Açao
Agora vamos tentar uma abordagem diferente. Digamos que você precise manter o nome do arquivo. O nome do arquivo vem após o último
/
e antes da string de consulta?
.Será:
Algo assim fará com que funcione:
ATUALIZAR:
Para os fãs de um liner, tente isso no console / firebug e o URL desta página será alterado:
O URL desta página será alterado de:
Para
Nota: como Samuel Liew indicou nos comentários abaixo, esse recurso foi introduzido apenas para
HTML5
.Uma abordagem alternativa seria realmente redirecionar sua página (mas você perderá a string de consulta `? '', Ela ainda é necessária ou os dados foram processados?).
fonte
replaceState
parece um ajuste melhor, maspushState
funcionará também, ou seja, até você começar a clicar nos botões voltar e avançar no navegador e perceber que há uma razão para haver bibliotecas inteiras para trabalhar com a API do histórico.url.substring(url.lastIndexOf('/') + 1);
.url.split("?")[0]
receberá a peça antes do primeiro ponto de interrogação, que é tudo o que acho que o OP pediu. A pergunta do OP pergunta: "Estou tentando remover tudo após o"? "No URL do navegador".Tudo isso é enganoso, você nunca deseja adicionar ao histórico do navegador, a menos que queira ir para uma página diferente em um aplicativo de página única. Se você deseja remover os parâmetros sem alterar a página, use:
fonte
uma maneira simples de fazer isso, funciona em qualquer página, requer HTML 5
fonte
Eu acredito que o melhor e mais simples método para isso é:
fonte
se eu tiver uma tag especial no final do meu URL, como: http://domain.com/?tag=12345 Aqui está o código abaixo para remover essa tag sempre que ela aparecer na URL:
Isso dá a idéia de remover um ou mais (ou todos) parâmetros do URL
Com window.location.pathname, você basicamente obtém tudo antes de '?' no URL.
fonte
Eu queria remover apenas um parâmetro
success
. Veja como você pode fazer isso:Isso também mantém
#hash
.URLSearchParams
não funcionará no IE, mas está sendo trabalhado no Edge . Você pode usar um polyfill ou poderia usar uma função auxiliar ingênua para suporte do IE:Isso pode ser usado como:
fonte
take_param
já está fazendo isso, mas você pode fazer aURLSearchParams
fazer o mesmo fazendo:history.replaceState(null, '', (params ? '?' + params : '') + location.hash)
. Ou como você quiser.Melhor solução:
fonte
Nenhuma dessas soluções realmente funcionou para mim, aqui está uma função compatível com IE11 que também pode remover vários parâmetros:
fonte
fonte
Para limpar todos os parâmetros, sem fazer uma atualização da página, E se você estiver usando HTML5, poderá fazer o seguinte:
history.pushState({}, '', 'index.html' ); //replace 'index.html' with whatever your page name is
Isso adicionará uma entrada no histórico do navegador. Você também pode considerar
replaceState
se não deseja adicionar uma nova entrada e apenas deseja substituir a entrada antiga.fonte
No jquery use <
fonte
Aqui está um liner para o ES6 que preserva o hash do local e não polui o histórico do navegador usando
replaceState
:fonte
location
aka globalwindow.location
, para que a função tenha acesso aos globaislocation
comol
o resto é básico replaceState, como em todas as outras respostas, ele concatena o nome do caminho e o hash (exemplo.com/#hash) como o novo URL. Espero que seja digerível, se não me avise 😉window.history.replaceState({}, '', location.pathname + location.hash)
? ;)location
duas vezes 😁 ainda não precisa atribuí-lo a uma variável 😉 ou há mais alguma coisa Joey?