Я пытаюсь клонировать элемент начальной загрузки, который имеет поведение переключения данных, предоставляемое bootstrap:
HTML
<div class="container">
<button aria-expanded="false" data-target="#collapsible_obj_0" data-toggle="collapse" class="btn btn-link collapsed">click here</button>
<div style="height: 0px;" aria-expanded="false" id="collapsible_obj_0" class="collapse">
<span>foo</span>
</div>
</div>
После клонирования я меняю ID
div на новый уникальный id, а кнопка data-target
кнопки указывает на новый div,
JS
var header = objectContainer.clone(true);
var counter = this.collapsibleObjCounter++;
var collapseId = "collapsible_obj_" + counter;
header.find(".collapse").attr("id", collapseId);
header.find("button[data-toggle='collapse']").attr("data-target", "#"+collapseId);
Кнопка и div являются дочерними элементами контейнера объектов. Я клонирование.
Иногда это работает, но иногда я получаю кнопку, которая все еще расширяет и сжимает оригинальный div, даже если при проверке HTML идентификаторы выглядят правильно.
Я подозреваю, что обработчик события, который скопирован, может быть жестким кодированием ссылки на идентификатор div, который нужно развернуть и сжать, поэтому просто исправление идентификаторов в элементах DOM не работает. Однако это не объясняет, почему некоторые из клонов работают, а другие нет.
Каков правильный способ клонирования того, к чему привязаны загрузочные поведения?
Итак, в нескольких ответах указано, что просто удаление true
из моего вызова clone()
позволит избежать копирования прослушивателя событий. Поэтому я теперь понимаю, что моя проблема немного сложнее, чем тот, который я упростил здесь. Я задам его как отдельный вопрос. (Клонирование элемента Bootstrap, но не всех прослушивателей событий)