【问题标题】:Passing jQuery object through History.pushState() function通过 History.pushState() 函数传递 jQuery 对象
【发布时间】:2011-05-06 01:11:10
【问题描述】:

我正在使用 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) 对象。

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

【问题讨论】:

  • 有点困惑:你的第一个代码块根本没有选择一个 jQuery 对象,根据详细的转储(如果是检索到的对象)那么它是一个 jQuery 对象......所以我不确定你的意思是什么?
  • 我在格式化文本时错误地删除了“$”。

标签: javascript jquery html browser-history pushstate


【解决方案1】:

传递给 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)
  }
}

【讨论】:

  • 您好,感谢您的建议!但我需要这个对象,因为当代码是这样推进时: $('.links').click(function(e){ var object = {item: $(this)};history.pushState(object,"test ","test");e.preventDefault();});
猜你喜欢
  • 2011-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-04
  • 1970-01-01
相关资源
最近更新 更多