Вы спрашиваете «Почему», поэтому вот ответ:
JQM - это смешанная структура JS / CSS, т.е. widgets
расширены JS и стилизованы CSS . После инициализации страницы виджеты (идентифицируемые тегом «data-role
») расширяются платформой путем добавления некоторых вложенных элементов (div
, span
), pseudo-elements
(значки) и обработчиков событий.
Тем не менее, в вашем коде вы сохраняете расширенную версию своей начальной разметки вместе с атрибутом data-role
, но вы сохраняете только разметку , это означает, что вы не сохранит JS data
, который будет создан фреймворком во время инициализации виджета. Короче говоря, вы сохраняете только половину уже улучшенного виджета.
В следующий раз структура снова найдет атрибут data-role
, но не связанный с ним объект data
, и вызовет $("#new").collapsible();
В результате вы получите эту разметку с двойной вложенностью.
Дополнительная информация:
Вы можете взглянуть на объект виджета JQM следующим образом:
$.data(document.getElementById("new"),"mobile-collapsible")
или:
$("#new").jqmData("mobile-collapsible")
Для вашей задачи существует несколько возможных решений.
Возможно, вы можете восстановить исходную неулучшенную разметку:
$("#collapsibleComponent :jqmData(role='collapsible')").collapsible("destroy");
и сохранить это:
localStorage.setItem("html_data", JSON.stringify($("#collapsibleComponent").html()));
Наконец, вы предполагаете, что
для захвата требуемого кода, идентичного отображаемому, правильно
неверно.