46

背景:特定のコンテンツを展開できる HTML ページがあります。このような展開ではページのごく一部のみを読み込む必要があるため、新しい URL/HTML ページに誘導するのではなく、JavaScript を介して読み込みます。ただし、おまけとして、ユーザーはそのような展開されたセクションにパーマリンクすることができます。つまり、他の人に次のような URL を送信します。

http://example.com/#foobar

その他のユーザーのために「foobar」カテゴリがすぐに開かれるようにします。これはparent.location.hash = 'foobar'を使用して機能するため、その部分は問題ありません。

ここで質問:ユーザーがページ上のそのようなカテゴリを閉じたときに、URL フラグメントを再び空にしたい、つまり、 http : //example.com/#foobarをhttp://example.com/に変更して、パーマリンクの表示を更新します。 . ただし、これを使用するとページ全体がリロードされます (たとえば、Firefox 3 の場合)。これは避けたいと思います。を使用してもページのリロードはトリガーされませんが、URL に見栄えの悪い "#" 記号が残ります。一般的なブラウザで、ページを更新せずに「#」記号を含む URL アンカーを JavaScript で削除する方法はありますか?parent.location.hash = ''window.location.href = '/#'

4

8 に答える 8

53

他の人が述べているように、HTML5のreplaceStateを使用してURLフラグメントを削除できます。

次に例を示します。

// remove fragment as much as it can go without adding an entry in browser history:
window.location.replace("#");

// slice off the remaining '#' in HTML5:    
if (typeof window.history.replaceState == 'function') {
  history.replaceState({}, '', window.location.href.slice(0, -1));
}
于 2012-12-11T16:20:07.130 に答える
14

ハッシュ値に対するアクションを制御しているので、「#_」や「#default」など、「何もない」ことを意味するトークンを使用しないでください。

于 2008-11-06T15:22:40.967 に答える
4

ASCIIcasts 246: AJAX History StateおよびGitHub ブログ で説明されているように、光沢のある新しい HTML5window.history.pushStatereplaceStateメソッドを使用できます。これにより、フラグメントだけでなく、パス全体 (同じオリジン ホスト内) を変更できます。この機能を試すには、最近のブラウザーでGitHub リポジトリを参照してください。

于 2011-01-06T19:44:29.860 に答える
1

ハッシュを使用する代わりに別のオプションもありますjavascript: void(0); 。例を使用できます。<a href="javascript:void(0);" class="open_div">Open Div</a>

そのようなリンクがいつ必要になるかにもよると思いますので、次のリンクを確認してください。

使用方法: http://www.brightcherry.co.uk/scribbles/2010/04/25/javascript-how-to-remove-the-trailing-hash-in-a-url/ または何についての議論を確認してくださいこちらの方が優れています: JavaScript リンクには、「#」または「javascript:void(0)」のどちらの「href」値を使用する必要がありますか?

于 2011-01-05T09:29:51.700 に答える
-1
$(document).ready(function() {
        $(".lnk").click(function(e) {
            e.preventDefault();
            $(this).attr("href", "stripped_url_via_desired_regex");
        });
    });
于 2008-11-06T15:28:42.297 に答える
-1

だから使う

parent.location.hash = ''最初

それからする

window.location.href=window.location.href.slice(0, -1);
于 2009-07-16T16:58:19.217 に答える
-2

他の方がおっしゃる通り、あなたには無理です。さらに...真剣に、jQuery Ajaxyの作成者として-私は何年もの間完全なajax Webサイトを展開してきました-そして、エンドユーザーがこのハッシュが起こっていることに不満を言ったり、気付いたりしたことがないことを保証できます。それが機能し、彼らが目的を達成する限り、気にしません。

ただし、適切な解決策は HTML5 PushState/ReplaceState/PopState です ;-) もうフラグメント識別子は必要ありません: https://developer.mozilla.org/en/DOM/Manipulating_the_browser_history これをサポートする HTML5 および HTML4 互換プロジェクトの場合HTML5 状態機能はhttps://github.com/browserstate/History.jsをチェックしてください:-)

于 2011-01-05T09:58:20.450 に答える