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

#javascript #jquery #html #browser-history #pushstate

#javascript #jquery #HTML #браузер-история #pushstate

Вопрос:

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

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

консоль.журнал(object.link); 

History.pushState(объект, "тест", "test.php ");

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


jQuery(div#varianty.box)

Но когда запускается событие statechange:

История.Adapter.bind(окно,'statechange', функция(){ 

 состояние переменной = History.getState();

 переменная ссылка = State.data.link;

 console.log(ссылка); 
});

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


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

Подробный дамп

0 => Объект { jQuery1304643255828=39, конструктор={...}}

контекст => Объект { местоположение ={...}}

длина => 1

селектор => "#варианты"

Есть ли какой-либо шанс повторно получить состояние объекта jQuery object, если нет, то нет классного способа, но я могу снова выбрать объект с помощью: $(State.data.link.selector);

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

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

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

Комментарии:

1. Немного запутался: ваш первый блок кода вообще не выбирает объект jQuery, и, согласно подробному дампу (если это извлеченный объект), это jQuery object…so Я не уверен, что вы имеете в виду?

2. Я по ошибке удалил ‘$’, когда форматировал текст.

Ответ №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)
  }
}
  

Комментарии:

1. Привет, спасибо за ваше предложение!. Но мне нужен объект, потому что когда код продвигается вот так: $(‘.links’).click(функция(e){ var object = {item: $(this)};history.pushState(объект, «test», «тест»); e.preventDefault();});