Внутренний ли 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 это из документа, повторно добавив его, когда вы закончите.

Другие вопросы по тегам