#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();});