Внутренний ли jquery clone() пользовательский документфрагмент?
Я вставляю элементы в dom динамически, и для этого я использую следующие шаги:(jquery) Исходная структура dom выглядит следующим образом:
<div parent div>
</div>
<div child div template>
</div>
- клонировать родительский div с помощью jquery .clone()
- клонировать ребенка в див и делать манипуляции
- добавить клонированному родителю
- сделать это для всех дочерних данных
(parentdiv original).replaceAll(clonedparent)
По сути, я хочу клонировать родительский div таким образом, чтобы он был доступен как фрагмент документа и чтобы добавление не происходило в dom и не увеличивало производительность.
Будет ли JQuery clone()
дать преимущество в производительности, ведя себя как documentfragment? Или есть лучший способ сделать это? Я не хочу конструировать каждый дочерний элемент как строку HTML, так как их структура довольно сложна.
1 ответ
JQuery clone()
делает простой DOM cloneNode()
, кроме IE, который некорректно копирует прослушиватели событий, если вы это делаете. Чтобы обойти это, в IE jQuery делает нечто ужасное, о чем вы действительно не хотите знать. Который не быстрый.
replaceAll()
тоже не быстро. Он должен удалить каждый дочерний узел из DOM (что особенно медленно в jQuery из-за необходимости проверять data
при удалении чего-либо из DOM) и добавьте новые узлы один за другим.
Я действительно не понимаю, что клонирование дает вам здесь на самом деле. Просто делайте манипуляции прямо на детей. Если у вас есть много манипуляций, и вы запускаете ретрансляции, которые замедляют его, вы можете временно скрыть родителя или detach
это из документа, повторно добавив его, когда вы закончите.