1

History.pushState() 関数を使用しています。プッシュ状態オブジェクトに jQuery オブジェクトを保存していますが、statechange イベントが発生すると、jQuery オブジェクトを使用せずに状態オブジェクト データを取得していますが、「通常の」オブジェクトのみを取得しています。

var object = {link : $("#varianty")};

console.log(object.link);   

History.pushState(object,"test","test.php");

コンソールが jQuery オブジェクトを返す

jQuery(div#varianty.box)

しかし、statechange イベントが発生すると、次のようになります。

History.Adapter.bind(window,'statechange',function(){       

        var State = History.getState();

        var link = State.data.link;

        console.log(リンク);     
});

コンソールがオブジェクトを返す

Object { length=1, 0={...}, more...}

詳細ダンプ

0 => オブジェクト { jQuery1304643255828=39, コンストラクター={...}}

コンテキスト => オブジェクト { 場所 ={...}}

長さ => 1

セレクター => "#バリエーション"

状態オブジェクトjQueryオブジェクトを取得する機会はありますか? いいえの場合、クールな方法はありませんが、次の方法でオブジェクトを再度選択できます: $(State.data.link.selector);

しかし、jQueryオブジェクトをpushStateオブジェクトに渡すのは無意味です...

$(this)クリックイベントでオブジェクトをプッシュする必要があります。

アドバイスや解決策をありがとう!:)

4

1 に答える 1

2

pushState関数に渡すオブジェクトは、popstateイベントで生成されると、プロトタイプを失うように見えます。これを回避するには、イベントを聞いているときにプロトタイプを再度アタッチします。

あなたの場合、必要な要素のセレクターだけをpushStateに渡す方が良いかもしれませんが

history.pushState({selector: "#my-div"}, "test", "/test")

そうすれば、jQueryを使用してpopstateイベントのdomから要素を取得できます。

history.onpopstate = function (event) {
  if (event.state) {
    var myElem = $(event.state.selector)
  }
}
于 2011-05-06T10:28:27.687 に答える