I have URL like: http://example.com#something
, how do I remove #something
, without causing the page to refresh?
I attempted the following
Initial question:
window.location.href.substr(0, window.location.href.indexOf('#'))
or
window.location.href.split('#')[0]
both will return the URL without the hash or anything after it.
With regards to your edit:
Any change to window.location
will trigger a page refresh. You can change window.location.hash
without triggering the refresh (though the window will jump if your hash matches an id on the page), but you can't get rid of the hash sign. Take your pick for which is worse...
MOST UP-TO-DATE ANSWER
The right answer on how to do it without sacrificing (either full reload or leaving the hash sign there) is down here. Leaving this answer here though with respect to being the original one in 2009 whereas the correct one which leverages new browser APIs was given 1.5 years later.
You can do it as below:
history.replaceState({}, document.title, window.location.href.split('#')[0]);
How about the following?
window.location.hash=' '
Please note that am setting the hash to a single space and not an empty string.
Setting the hash to an invalid anchor does not cause a refresh either. Such as,
window.location.hash='invalidtag'
But, I find above solution to be misleading. This seems to indicate that there is an anchor on the given position with the given name although there isn't one. At the same time, using an empty string causes page to move to the top which can be unacceptable at times. Using a space also ensures that whenever the URL is copied and bookmarked and visited again, the page will usually be at the top and the space will be ignored.
And, hey, this is my first answer on StackOverflow. Hope someone finds it useful and it matches the community standards.
Try the following:
window.history.back(1);