Tengo URL como: http://example.com#something
¿cómo elimino #something
sin hacer que la página se actualice?
Intenté la siguiente solución:
window.location.hash = '';
Sin embargo, esto no elimina el símbolo hash #
de la URL.
Tengo URL como: http://example.com#something
¿cómo elimino #something
sin hacer que la página se actualice?
Intenté la siguiente solución:
window.location.hash = '';
Sin embargo, esto no elimina el símbolo hash #
de la URL.
Respuestas:
Pregunta inicial:
window.location.href.substr(0, window.location.href.indexOf('#'))
o
window.location.href.split('#')[0]
ambos devolverán la URL sin el hash ni nada después.
Con respecto a su edición:
Cualquier cambio a window.location
activará una actualización de la página. Puede cambiar window.location.hash
sin activar la actualización (aunque la ventana saltará si su hash coincide con una identificación en la página), pero no puede deshacerse del signo hash. Elija lo que es peor ...
RESPUESTA MÁS ACTUALIZADA
La respuesta correcta sobre cómo hacerlo sin sacrificar (ya sea recarga completa o dejar el signo hash allí) está aquí abajo . Dejando esta respuesta aquí, sin embargo, con respecto a ser la original en 2009, mientras que la correcta que aprovecha las nuevas API del navegador se dio 1.5 años después.
Resolver este problema está mucho más al alcance hoy en día. La API de historial HTML5 nos permite manipular la barra de ubicación para mostrar cualquier URL dentro del dominio actual.
function removeHash () {
history.pushState("", document.title, window.location.pathname
+ window.location.search);
}
Demostración de trabajo: http://jsfiddle.net/AndyE/ycmPt/show/
Esto funciona en Chrome 9, Firefox 4, Safari 5, Opera 11.50 y en IE 10. Para los navegadores no compatibles, siempre puedes escribir un script que se use con gracia cuando esté disponible:
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;
}
}
Para que pueda deshacerse del símbolo hash, simplemente no en todos los navegadores, todavía.
Nota: si desea reemplazar la página actual en el historial del navegador, use en replaceState()
lugar de pushState()
.
(Demasiadas respuestas son redundantes y desactualizadas). La mejor solución ahora es esta:
history.replaceState(null, null, ' ');
history.pushState(null, null, ' ')
en su lugar si desea preservar el historial.
null
por las state
y title
los parámetros en última instancia hace.
Simple y elegante:
history.replaceState({}, document.title, "."); // replace / with . to keep url
.
lugar de /
. El uso /
cambia la url a la ruta raíz.
history.replaceState({}, document.title, location.href.substr(0, location.href.length-location.hash.length));
para mi caso de uso.
history.replaceState(null, document.title, location.pathname + location.search);
Para eliminar el hash, puede intentar usar esta función
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);
}
}
Esto eliminará también el hash final. Por ejemplo: http://test.com/123#abc -> http://test.com/123
if(window.history.pushState) {
window.history.pushState('', '/', window.location.pathname)
} else {
window.location.hash = '';
}
¿Qué tal lo siguiente?
window.location.hash=' '
Tenga en cuenta que estoy configurando el hash en un solo espacio y no en una cadena vacía.
Establecer el hash en un ancla no válida tampoco causa una actualización. Como,
window.location.hash='invalidtag'
Pero, encuentro que la solución anterior es engañosa. Esto parece indicar que hay un ancla en la posición dada con el nombre dado, aunque no hay ninguno. Al mismo tiempo, el uso de una cadena vacía hace que la página se mueva a la parte superior, lo que a veces puede ser inaceptable. El uso de un espacio también garantiza que siempre que la URL se copie, marque y vuelva a visitar, la página generalmente estará en la parte superior y se ignorará el espacio.
Y, oye, esta es mi primera respuesta en StackOverflow. Espero que alguien lo encuentre útil y coincida con los estándares de la comunidad.
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>
poner este código en la sección de la cabeza
function removeLocationHash(){
var noHashURL = window.location.href.replace(/#.*$/, '');
window.history.replaceState('', document.title, noHashURL)
}
window.addEventListener("load", function(){
removeLocationHash();
});
Creo que sería más seguro
if (window.history) {
window.history.pushState('', document.title, window.location.href.replace(window.location.hash, ''));
} else {
window.location.hash = '';
}
Intenta lo siguiente:
window.history.back(1);
Aquí hay otra solución para cambiar la ubicación usando href y borrar el hash sin desplazarse.
La solución mágica se explica aquí . Especificaciones aquí .
const hash = window.location.hash;
history.scrollRestoration = 'manual';
window.location.href = hash;
history.pushState('', document.title, window.location.pathname);
NOTA: La API propuesta ahora es parte de WhatWG HTML Living Standard
$(window).on('hashchange', function (e) {
history.replaceState("", document.title, e.originalEvent.oldURL);
});
Puede reemplazar hash con nulo
var urlWithoutHash = document.location.href.replace(location.hash , "" );