387

次のようなURLがあります: 、ページを更新せず http://example.com#somethingに削除するにはどうすればよいですか?#something

私は次の解決策を試みました:

window.location.hash = '';

ただし、これ#によってURLからハッシュ記号が削除されるわけではありません。

4

17 に答える 17

643

この問題を解決することは、今日でははるかに手の届くところにあります。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 、および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().

于 2011-03-14T12:38:17.623 に答える
234

最初の質問:

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 年後に提供されましたが、この回答をここに残します。

于 2009-09-09T03:06:38.220 に答える
14

これにより、末尾のハッシュも削除されます。例: http://test.com/123#abc -> http://test.com/123

if(window.history.pushState) {
    window.history.pushState('', '/', window.location.pathname)
} else {
    window.location.hash = '';
}
于 2016-08-17T18:05:17.757 に答える
6

以下はいかがでしょうか?

window.location.hash=' '

ハッシュを空の文字列ではなく単一のスペースに設定していることに注意してください。


ハッシュを無効なアンカーに設定しても、リフレッシュは発生しません。そのような、

window.location.hash='invalidtag'

しかし、上記の解決策は誤解を招くと思います。これは、指定された位置に指定された名前のアンカーがあることを示しているようですが、アンカーはありません。同時に、空の文字列を使用すると、ページが上部に移動するため、受け入れられない場合があります。また、スペースを使用すると、URL がコピーされ、ブックマークされ、再度アクセスされるたびに、通常はページが一番上に表示され、スペースは無視されます。

そして、ちょっと、これは StackOverflow に関する私の最初の回答です。誰かがそれを役に立ち、コミュニティの基準と一致することを願っています.

于 2015-02-07T17:58:45.340 に答える
3
<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>

このコードを head セクションに置きます

于 2016-01-07T16:58:23.297 に答える
3
function removeLocationHash(){
    var noHashURL = window.location.href.replace(/#.*$/, '');
    window.history.replaceState('', document.title, noHashURL) 
}

window.addEventListener("load", function(){
    removeLocationHash();
});
于 2020-02-03T07:42:12.277 に答える
-1

次のことを試してください。

window.history.back(1);
于 2013-07-13T10:10:44.497 に答える
-4

ハッシュをnullに置き換えることができます

var urlWithoutHash = document.location.href.replace(location.hash , "" );
于 2013-09-27T06:04:38.517 に答える