-2

wordpress の単一ページの Web サイトで ajax を使用してコンテンツを読み込んでいます。ajax投稿が読み込まれるたびにURLを変更しようとしています。

アイテムがクリックされたときにハッシュを変更するために使用するコードを次に示します。load 関数は機能しているので、わかりやすくするために以下のコードには追加しません (クリックした li の href を取得し、コンテンツを div にロードするだけです)。

    $(document).ready(function() {
        $.ajaxSetup({cache: false});

        $('#portfolio-list li:not(#DrawerContainer)').click(function() {

           window.location.hash = "#!" + this.pathname;
           alert(window.location.hash);

        //And here comes the loading part

        return false;
        });

    return false;       
    });

残念ながら、私の URL に追加されたのは#!undefined. そして警告するwindow.location.hashthis.pathname、私に同じ結果を与えます。

アドレスバーにパス名をハッシュとして返すには何が必要ですか?

4

1 に答える 1

0

あなたの構造によれば、これはあなたの友好的なハッシュを作るはずです:

var pathname = $(this).find('a')[0].href.split('/'),
    l = pathname.length;
pathname = pathname[l-1] || pathname[l-2];
window.location.hash = "#!" + pathname;

デモ


URL を共有可能にするには、DOM の準備が整った状態でハッシュ チェックを実行し、対応するコンテンツをロードする必要があります。

すべてのページが同じディレクトリにある場合は、直接実行できます。

 $(function() {
     var hash = window.location.hash;
     //checks if hash exists and is hash bang
     if (hash && hash.substring(0, 2) === '#!') {
         hash = hash.substring(2); //removes leading #!
         $('#content').load('path/to/' + hash);
     }
 });

デモ

ページがすべて同じディレクトリにない場合は、ハッシュをアドレスにマップする必要があります。

$(function() {
    var hashmap = {
        'test5': 'http://foobar.baz/fooz/test5',
        'anotherTest': 'http://foobar.baz/barz/anotherTest',
    };
    var hash = window.location.hash;
    //checks if hash exists and is hash bang
    if (hash && hash.substring(0, 2) === '#!') {
        hash = hash.substring(2); //removes leading #!
        if (hashmap[hash]) { //checks if hash exist in the hash map
            $('#content').load(hashmap[hash]);
        }
    }
});

デモ

ロードが失敗するため、上記のデモでアラートを使用しています。もちろん$('#content').load、好みのロード方法で適応/置換する必要があります。

于 2012-11-06T11:53:43.723 に答える