Ho un URL come:, come http://example.com#something
rimuovo #something
, senza far aggiornare la pagina?
Ho provato la seguente soluzione:
window.location.hash = '';
Tuttavia, ciò non rimuove il simbolo hash #
dall'URL.
Ho un URL come:, come http://example.com#something
rimuovo #something
, senza far aggiornare la pagina?
Ho provato la seguente soluzione:
window.location.hash = '';
Tuttavia, ciò non rimuove il simbolo hash #
dall'URL.
Risposte:
Domanda iniziale:
window.location.href.substr(0, window.location.href.indexOf('#'))
o
window.location.href.split('#')[0]
entrambi restituiranno l'URL senza l'hash o nulla dopo.
Per quanto riguarda la tua modifica:
Qualsiasi modifica a window.location
attiverà un aggiornamento della pagina. Si può cambiarewindow.location.hash
senza attivare l'aggiornamento (anche se la finestra salterà se il tuo hash corrisponde a un ID sulla pagina), ma non puoi liberarti del segno hash. Fai la tua scelta per cui è peggio ...
RISPOSTA PIÙ AGGIORNATA
La risposta giusta su come farlo senza sacrificare (ricaricare completamente o lasciare lì il segno di hash) è qui . Lasciando qui questa risposta rispetto all'originale nel 2009, mentre quella corretta che sfrutta le nuove API del browser è stata data 1,5 anni dopo.
Al giorno d'oggi, risolvere questo problema è molto più a portata di mano. L' API History HTML5 ci consente di manipolare la barra degli indirizzi per visualizzare qualsiasi URL all'interno del dominio corrente.
function removeHash () {
history.pushState("", document.title, window.location.pathname
+ window.location.search);
}
Demo funzionante: http://jsfiddle.net/AndyE/ycmPt/show/
Funziona in Chrome 9, Firefox 4, Safari 5, Opera 11.50 e in IE 10. Per i browser non supportati, puoi sempre scrivere uno script con buon degrado che lo usi ove disponibile:
function removeHash () {
var scrollV, scrollH, loc = window.location;
if ("pushState" in history)
history.pushState("", document.title, loc.pathname + loc.search);
else {
// Prevent scrolling by storing the page's current scroll offset
scrollV = document.body.scrollTop;
scrollH = document.body.scrollLeft;
loc.hash = "";
// Restore the scroll offset, should be flicker free
document.body.scrollTop = scrollV;
document.body.scrollLeft = scrollH;
}
}
Quindi puoi sbarazzarti del simbolo dell'hash, non solo in tutti i browser - ancora.
Nota: se si desidera sostituire la pagina corrente nella cronologia del browser, utilizzare replaceState()
invece di pushState()
.
(Troppe risposte sono ridondanti e obsolete.) La soluzione migliore ora è questa:
history.replaceState(null, null, ' ');
history.pushState(null, null, ' ')
invece se si desidera conservare la cronologia.
null
per i parametri state
e title
.
Semplice ed elegante:
history.replaceState({}, document.title, "."); // replace / with . to keep url
.
posto di /
. L'uso /
modifica l'URL nel percorso principale.
history.replaceState({}, document.title, location.href.substr(0, location.href.length-location.hash.length));
mio caso d'uso.
history.replaceState(null, document.title, location.pathname + location.search);
Per rimuovere l'hash, puoi provare a usare questa funzione
function remove_hash_from_url()
{
var uri = window.location.toString();
if (uri.indexOf("#") > 0) {
var clean_uri = uri.substring(0, uri.indexOf("#"));
window.history.replaceState({}, document.title, clean_uri);
}
}
Questo rimuoverà anche l'hash finale. ad es .: http://test.com/123#abc -> http://test.com/123
if(window.history.pushState) {
window.history.pushState('', '/', window.location.pathname)
} else {
window.location.hash = '';
}
Che ne dici di quanto segue?
window.location.hash=' '
Nota che sto impostando l'hash su un singolo spazio e non su una stringa vuota.
L'impostazione dell'hash su un ancoraggio non valido non provoca neanche un aggiornamento. Ad esempio,
window.location.hash='invalidtag'
Ma trovo che la soluzione di cui sopra sia fuorviante. Questo sembra indicare che esiste un punto di ancoraggio su una determinata posizione con il nome dato sebbene non ce ne sia uno. Allo stesso tempo, l'uso di una stringa vuota fa sì che la pagina si sposti all'inizio, che a volte può essere inaccettabile. L'uso di uno spazio garantisce inoltre che ogni volta che l'URL viene copiato, aggiunto ai segnalibri e visitato di nuovo, la pagina sarà di solito in alto e lo spazio verrà ignorato.
E, ehi, questa è la mia prima risposta su StackOverflow. Spero che qualcuno lo trovi utile e corrisponda agli standard della comunità.
const url = new URL(window.location);
url.hash = '';
history.replaceState(null, document.title, url);
<script type="text/javascript">
var uri = window.location.toString();
if (uri.indexOf("?") > 0) {
var clean_uri = uri.substring(0, uri.indexOf("?"));
window.history.replaceState({}, document.title, clean_uri);
}
</script>
inserisci questo codice nella sezione head
function removeLocationHash(){
var noHashURL = window.location.href.replace(/#.*$/, '');
window.history.replaceState('', document.title, noHashURL)
}
window.addEventListener("load", function(){
removeLocationHash();
});
Penso che sarebbe più sicuro
if (window.history) {
window.history.pushState('', document.title, window.location.href.replace(window.location.hash, ''));
} else {
window.location.hash = '';
}
Prova quanto segue:
window.history.back(1);
Ecco un'altra soluzione per cambiare la posizione usando href e cancellare l'hash senza scorrere.
La soluzione magica è spiegata qui . Specifiche qui .
const hash = window.location.hash;
history.scrollRestoration = 'manual';
window.location.href = hash;
history.pushState('', document.title, window.location.pathname);
NOTA: l'API proposta fa ora parte di WhatWG HTML Living Standard
$(window).on('hashchange', function (e) {
history.replaceState("", document.title, e.originalEvent.oldURL);
});
È possibile sostituire l'hash con null
var urlWithoutHash = document.location.href.replace(location.hash , "" );