1

このコードを使用して、# 記号の後の URL の内容を確認しています。

var a = document.URL.split("#")[1];

たとえば、ページの URL が の場合http://example.com/path/to/somewhere/#contentpart、変数aには が含まれますcontentpart

しかし問題は、ユーザーが同じページを指しているが別の部分 (例: <a href="#footer">Go to footer</a>) を指すリンクをクリックする可能性があり、その場合、ページがリロードされないことです。(ページだけが別の場所に移動します)

私の質問は、# 同じページにサインインした後に URL が変更されたことを検出する方法ですか?

任意の javascript/jQuery メソッドを歓迎します。

4

2 に答える 2

4

現在のコードを念頭に置いて、次のことをお勧めします。

$(window).on('hashchange', function(e){
    var newHash = document.href.split('#')[1];
});

単純に使用する方が少し簡単ですが:

$(window).on('hashchange', function(e){
    var newHash = document.location.hash;
    console.log(newHash);
});

JS フィドルのデモ

#ハッシュに文字を含めたくない場合は、代わりに次を使用します。

$(window).on('hashchange', function(e){
    var newHash = document.location.hash.substring(1);
    console.log(newHash);
});

JS フィドルのデモ

于 2012-08-15T22:40:43.143 に答える
2

hashのプロパティを 取得することで、URL ハッシュを取得できます。window.location

var a = window.location.hash;

このプロパティを変更すると、hashchange最新のすべてのブラウザーでイベントが発生します。MDN の記事に含まれている IE7 以下の回避策があります。

window.onhashchange = function (e) {
    // Manage changes to your page
    // You can also inspect e.newURL and e.oldURL if you need to

    // Optionally prevent window from scrolling to target
    e.preventDefault();
}

jQuery を使用している場合は、jQuery BBQをご覧ください。多くの癖やブラウザの互換性の問題をまとめ、ユーザーがリンクをクリックすることに頼るのではなく、URL / 履歴の状態に変更をプッシュすることもできます。

于 2012-08-15T22:57:28.227 に答える