Передача объекта jQuery через функцию History.pushState () - PullRequest
1 голос
/ 06 мая 2011

Я использую функцию History.pushState (), я сохраняю в объект push-состояния объект jQuery, но когда запускается событие statechange, я получаю данные объекта состояния без объекта jQuery, но только с «нормальным» объектом:


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

console.log(object.link);   

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

Консоль возвращает объект jQuery

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);

Но тогда бесполезно передавать объект jQuery через объект pushState ...

Нужно, чтобы он выдвигал $(this) объект при событии щелчка.

Спасибо за любой совет или решение!:)

1 Ответ

2 голосов
/ 06 мая 2011

Объекты, которые вы передаете в функцию pushState, теряют свой прототип при выдаче в событии popstate. Чтобы обойти это, вы можете повторно прикрепить прототип при прослушивании события.

В вашем случае, возможно, было бы лучше передать только селектор для нужного элемента в pushState

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

Таким образом, вы можете просто получить элемент из dom на событии popstate с помощью jQuery

history.onpopstate = function (event) {
  if (event.state) {
    var myElem = $(event.state.selector)
  }
}
...