我正在使用History.pushState()函数,我将push状态对象保存为一个jQuery对象,但是当statechange事件被触发时,我正在查找状态对象数据而没有jQuery对象,但只有“普通”对象:
var object = {link : $("#varianty")}; console.log(object.link); History.pushState(object,"test","test.php");
jQuery(div#varianty.box)
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)
对象。
感谢您的任何建议或解决方案! :)
答案 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)
}
}