http://example.com#something
のようなURLがありますが、ページを更新せずに#something
を削除するにはどうすればよいですか?
私は以下の解決策を試みました。
window.location.hash = '';
ただし、これはURLからハッシュ記号#
を削除しません。
最初の質問:
window.location.href.substr(0, window.location.href.indexOf('#'))
または
window.location.href.split('#')[0]
どちらもURLをハッシュなしで返します。
あなたの編集に関して:
window.location
を変更すると、ページが更新されます。更新をトリガーせずにwindow.location.hash
を変更することはできますが(ハッシュがページ上のIDと一致するとウィンドウはジャンプします)、ハッシュ記号を削除することはできません。悪い方に選んでください...
最も最新の回答
犠牲にすることなくそれを実行する方法(正しいリロードまたはそこにハッシュ記号を残す)の正しい答えは、 ここを下に です。この答えをここに残すことは2009年に最初のものであることに関してではあるが、新しいブラウザAPIを活用する正しいものは1。5年後に与えられた。
この問題を解決することは、今日でははるかに手の届くところにあります。 HTML5 History API により、ロケーションバーを操作して現在のドメイン内の任意のURLを表示することができます。
function removeHash () {
history.pushState("", document.title, window.location.pathname
+ window.location.search);
}
実用的なデモ: http://jsfiddle.net/AndyE/ycmPt/show/
これはChrome 9、Firefox 4、Safari 5、Opera 11.50で動作します。and in IE 10。利用可能:
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;
}
}
だから、あなたはハッシュ記号を取り除くことができます、ただすべてのブラウザでそうではありません - それでも。
注:ブラウザ履歴の現在のページを置き換える場合は、replaceState()
の代わりにpushState()
を使用してください。
(あまりにも多くの答えが冗長で古くなっています。)今の最善の解決策はこれです:
history.replaceState(null, null, ' ');
シンプルでエレガント:
history.replaceState({}, document.title, "."); // replace / with . to keep url
ハッシュを削除するには、この関数を使ってみてください。
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);
}
}
末尾のハッシュも削除されます。例: http://test.com/123#abc - > http://test.com/12
if(window.history.pushState) {
window.history.pushState('', '/', window.location.pathname)
} else {
window.location.hash = '';
}
以下はどうですか?
window.location.hash=' '
ハッシュを空の文字列ではなく単一のスペースに設定していることに注意してください。
ハッシュを無効なアンカーに設定しても更新されません。といった、
window.location.hash='invalidtag'
しかし、上記の解決策は誤解を招くものだと思います。これは、指定された位置に指定された名前のアンカーがないことを示しているようです。同時に、空の文字列を使用すると、ページが最上部に移動します。スペースを使用すると、URLがコピーされてブックマークされ、またアクセスされたときにも必ずページが最上部に表示され、スペースは無視されます。
そして、ねえ、これがStackOverflowに関する私の最初の答えです。誰かがそれが有用であり、それがコミュニティの基準と一致することを願います。
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>
このコードを頭の部分に書いてください
あなたは以下のようにそれをすることができます:
history.replaceState({}, document.title, window.location.href.split('#')[0]);
以下を試してください。
window.history.back(1);
$(window).on('hashchange', function (e) {
history.replaceState("", document.title, e.originalEvent.oldURL);
});