通过History.pushState()函数传递jQuery对象

时间:2011-05-06 01:11:11

标签: javascript jquery html5 browser-history pushstate

我正在使用History.pushState()函数,我将push状态对象保存为一个jQuery对象,但是当statechange事件被触发时,我正在查找状态对象数据而没有jQuery对象,但只有“普通”对象:


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

console.log(object.link);   

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

Console返回jQuery对象

jQuery(div#varianty.box)

但是当statechange事件被触发时:

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

        var State = History.getState();

        var link = State.data.link;

        console.log(link);     
});

控制台返回一个对象

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

详细转储

0 =>    Object { jQuery1304643255828=39, constructor={...}}

context =>  Object { location={...}}

length =>   1

selector  =>    "#varianty"

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

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

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

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

1 个答案:

答案 0 :(得分: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)
  }
}