1

我正在使用 History.pushState() 函数,我正在将一个 jQuery 对象保存到推送状态对象中,但是当触发 statechange 事件时,我正在检索没有 jQuery 对象的状态对象数据,而只有“普通”对象:

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

控制台.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 链接 = State.data.link;

        控制台.log(链接);     
});

控制台返回一个对象

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

详细转储

0 => 对象 { jQuery1304643255828=39, 构造函数={...}}

上下文 => 对象 { 位置 ={...}}

长度 => 1

选择器=>“#varianty”

是否有机会在状态对象 jQuery 对象中进行检索,如果没有,则没有很酷的方法,但我可以通过以下方式再次选择对象: $(State.data.link.selector);

但是通过pushState对象传递jQuery对象是没有用的......

需要它$(this)在点击事件上推送对象。

感谢您的任何建议或解决方案!:)

4

1 回答 1

2

当在 popstate 事件中产生时,传递给 pushState 函数的对象似乎失去了它们的原型。为了解决这个问题,您可以在收听事件时重新附加原型。

在您的情况下,尽管将您需要的元素的选择器传递给 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 回答