I have URL like: http://example.com#something
, how do I remove #something
, without causing the page to refresh?
I attempted the following
$(window).on('hashchange', function (e) {
history.replaceState('', document.title, e.oldURL);
});
Here is another solution to change the location using href and clear the hash without scrolling.
The magic solution is explained here. Specs here.
const hash = window.location.hash;
history.scrollRestoration = 'manual';
window.location.href = hash;
history.pushState('', document.title, window.location.pathname);
NOTE: The proposed API is now part of WhatWG HTML Living Standard
const url = new URL(window.location);
url.hash = '';
history.replaceState(null, document.title, url);
(Too many answers are redundant and outdated.) The best solution now is this:
history.replaceState(null, null, ' ');
Simple and elegant:
history.replaceState({}, document.title, "."); // replace / with . to keep url
This will remove the trailing hash as well. eg: http://test.com/123#abc -> http://test.com/123
if(window.history.pushState) {
window.history.pushState('', '/', window.location.pathname)
} else {
window.location.hash = '';
}