Внутренний ли jquery clone () пользовательский документфрагмент? - PullRequest
0 голосов
/ 09 октября 2010

Я вставляю элементы в dom динамически, и для этого я использую следующие шаги: (jquery) Начальная структура dom выглядит следующим образом:

<div parent div>
 </div>
 <div child div template>
</div>
  • клонировать родительский div с помощью jquery .clone ()
  • клонировать дочерний элемент div и выполнить манипуляции
  • добавить к клонированному родительскому элементу
  • сделать это для всех дочерних данных
  • (parentdiv original).replaceAll(clonedparent)

По сути, я хочу клонировать родительский div таким образом, чтобы он был доступен в виде фрагмента документа и чтобы добавление не происходило в dom и не увеличивало производительность.

Будет ли jQuery clone() даватьпреимущество в производительности, ведя себя как documentfragment?Или есть лучший способ сделать это?Я не хочу конструировать каждый дочерний элемент как строку HTML, так как их структура довольно сложна.

1 Ответ

2 голосов
/ 09 октября 2010

jQuery clone() выполняет простой DOM cloneNode(), за исключением IE, который некорректно копирует прослушиватели событий, если вы это делаете.Чтобы обойти это, в IE jQuery делает нечто ужасное, о чем вы действительно не хотите знать.Что не быстро.

replaceAll() тоже не быстро.Он должен удалить каждый дочерний узел из DOM (что особенно медленно в jQuery из-за необходимости проверять data при удалении чего-либо из DOM) и добавлять новые узлы один за другим.

Я действительно не вижу, что клонирование приводит вас сюда.Просто делайте манипуляции прямо на детей.Если у вас есть много манипуляций, и вы запускаете ретрансляцию, которая делает его медленным, вы можете временно скрыть родительский или detach его из документа, повторно добавив его, когда вы закончите.

...