Передача объекта jQuery через функцию History.pushState ()

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


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

console.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 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) объект при событии щелчка.

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


person Pion    schedule 06.05.2011    source источник
comment
Немного запутано: ваш первый блок кода вообще не выбирает объект jQuery, и в соответствии с подробным дампом (если это полученный объект), это объект jQuery ... поэтому я не уверен, что вы значит?   -  person Chad    schedule 06.05.2011
comment
Я удалил "$" по ошибке, когда формировал текст.   -  person Pion    schedule 06.05.2011


Ответы (1)


Объекты, которые вы передаете функции 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)
  }
}
person Oliver Nightingale    schedule 06.05.2011
comment
Привет, спасибо за предложение !. Но мне нужен объект, потому что, когда код продвигается следующим образом: $ ('. Links'). Click (function (e) {var object = {item: $ (this)}; history.pushState (object, test, test); e.preventDefault ();}); - person Pion; 06.05.2011