次のようなURLがあります。http://example.com#something
削除するにはどうすればよいですか。#something
。ページを更新せずにはですか。
私は次の解決策を試みました:
window.location.hash = '';
ただし、これ#
によってURLからハッシュ記号が削除されるわけではありません。
次のようなURLがあります。http://example.com#something
削除するにはどうすればよいですか。#something
。ページを更新せずにはですか。
私は次の解決策を試みました:
window.location.hash = '';
ただし、これ#
によってURLからハッシュ記号が削除されるわけではありません。
回答:
最初の質問:
window.location.href.substr(0, window.location.href.indexOf('#'))
または
window.location.href.split('#')[0]
どちらもハッシュなしのURLまたはその後のURLを返します。
あなたの編集に関して:
に変更を加えるとwindow.location
、ページが更新されます。window.location.hash
更新をトリガーせずに変更できます(ただし、ハッシュがページ上のIDと一致する場合はウィンドウがジャンプします)が、ハッシュ記号を取り除くことはできません。どちらが悪いかを選んでください...
最も最新の回答
犠牲を払わずにそれを行う方法(完全なリロードまたはハッシュ記号をそこに残すこと)に関する正しい答えは、ここにあります。2009年の元の回答に関してはこの回答をそのままにしておきますが、新しいブラウザAPIを利用する正しい回答は1.5年後に与えられました。
この問題を解決することは、今日でははるかに手の届く範囲です。HTML5の歴史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 、および 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.pushState(null, null, ' ')
履歴を保存したい場合は、代わりに使用してください。
null
が最終的に何を行うかを説明すると役立つ場合がstate
ありtitle
ます。
シンプルでエレガント:
history.replaceState({}, document.title, "."); // replace / with . to keep url
.
代わりに使用するには、@ vahanpwnsノートに関して回答を更新してください/
。を使用/
すると、URLがルートパスに変更されます。
history.replaceState({}, document.title, location.href.substr(0, location.href.length-location.hash.length));
は自分のユースケースに合わせて修正しました。
history.replaceState(null, document.title, location.pathname + location.search);
これにより、末尾のハッシュも削除されます。例:http : //test.com/123#abc- > http://test.com/123
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>
このコードをヘッドセクションに配置します
もっと安全だと思います
if (window.history) {
window.history.pushState('', document.title, window.location.href.replace(window.location.hash, ''));
} else {
window.location.hash = '';
}
以下を試してください:
window.history.back(1);
次に、hrefを使用して場所を変更し、スクロールせずにハッシュをクリアする別のソリューションを示します。
const hash = window.location.hash;
history.scrollRestoration = 'manual';
window.location.href = hash;
history.pushState('', document.title, window.location.pathname);
注:提案されたAPIは、WhatWG HTML Living Standardの一部になりました
ハッシュをnullに置き換えることができます
var urlWithoutHash = document.location.href.replace(location.hash , "" );