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.
javascript
window.location
fragment-identifier
Tom Lehman
fuente
fuente
Respuestas:
Pregunta inicial:
o
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 cambiarwindow.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.
fuente
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.
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:
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 depushState()
.fuente
(Demasiadas respuestas son redundantes y desactualizadas). La mejor solución ahora es esta:
fuente
history.pushState(null, null, ' ')
en su lugar si desea preservar el historial.null
por lasstate
ytitle
los parámetros en última instancia hace.Simple y elegante:
fuente
.
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
fuente
Esto eliminará también el hash final. Por ejemplo: http://test.com/123#abc -> http://test.com/123
fuente
¿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.
fuente
Puedes hacerlo de la siguiente manera:
history.replaceState({}, document.title, window.location.href.split('#')[0]);
fuente
fuente
poner este código en la sección de la cabeza
fuente
fuente
Creo que sería más seguro
fuente
Intenta lo siguiente:
fuente
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í .
NOTA: La API propuesta ahora es parte de WhatWG HTML Living Standard
fuente
fuente
Puede reemplazar hash con nulo
fuente