Насколько эффективен element.cloneNode (true) (глубокий клон)?

Я создаю HTML-код в объекте XML DOM, который будет использоваться в качестве содержимого innerHTML элемента div с использованием шаблона XSL. Традиционно мы создаем новый документ XML DOM и добавляем входные параметры как элементы XML для преобразования через javascript. Все это занимает очень много времени, поскольку мы в основном вручную выбираем данные из другого XML-документа, который представляет нашу текущую учетную запись, и копируем данные во временный XML-документ DOM.

Что я хотел бы сделать, так это клонировать соответствующий узел документа учетной записи (т.е. информацию о клиенте) и использовать его в качестве основы для преобразования. Я не хочу использовать документ учетной записи напрямую, так как я хотел бы иметь возможность добавлять определенные входные данные преобразования, не внося изменений в объект учетной записи.

Насколько эффективно использование .cloneNode (true) для желаемого узла, обычно содержащего менее 200 элементов из документа, обычно содержащего более 2000 элементов? Целевая платформа - IE6 без внешних инструментов (например, ActiveX).

Этот вопрос требует редактирования, чтобы прояснить, что вы обсуждаете XML DOM cloneNode, а не HTML DOM cloneNode, которые в IE полностью различаются кодовыми базами.

AnthonyWJones 08.11.2008 13:48
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
1
7 217
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

IE не работает в определенных вещах.

например отмеченные переключатели / флажки не будут отмечены, когда вы добавите свою копию в DOM.

Пример:

http://webbugtrack.blogspot.com/2008/03/bug-199-cant-clone-form-element-in-ie.html

http://webbugtrack.blogspot.com/2007/08/bug-242-setattribute-doesnt-always-work.html

Чтобы увидеть, что на самом деле вернет IE, попробуйте заменить URL-адрес этим в адресной строке одной из ваших страниц и нажмите клавишу ВВОД.

javascript:'<xmp>'+window.document.body.outerHTML+'</xmp>';

Если вы довольны результатами - отлично !, но я думаю, вы в конечном итоге не будете удовлетворены тем, что возвращает IE (как в DOM, так и в этом эквиваленте «строкового» значения.

Насколько я понимаю, проблема не в том, что галочки не ставятся. IE копирует начальное состояние флажков и других тегов

Juan Mendes 11.01.2011 20:25

Я думаю, что самая большая уловка заключается в том, что когда вы копируете поле формы с name (99% будет), вы можете только "Что-то вроде" переименовать его. например Он будет отправлен с новым именем, но получить к нему доступ из DOM 0 myForm.elements[newName] не удастся. К сожалению, это только 1 проблема с клонированием в IE.

scunliffe 11.01.2011 22:22

Если вам не нужны элементы формы, cloneNode - действительно надежный инструмент ...

- а при вставке ajax-данных это невероятно по эффективности ...

Однако, поскольку у IE, в частности, есть история проблем с атрибутами имени, неудобно решать какие-либо из них, если вы вставляете данные ...

- Я не очень понимаю ваш XSL (T) - использование, для меня это звучит как использование заправочной станции как (не! -) удобного места для замены WV 1960 года на Skoda 2008 года ...

Обычно у них есть какая-то общая технология, хотя она не используется таким же образом, компьютеризация в некотором роде просто незначительная проблема, основные проблемы почти в Любые в другом случае! O]

Нужны ли формоэлементы? -)

Ответ принят как подходящий

CloneNode довольно эффективен, но при этом потребляет больше памяти.

Другой подход, который следует рассмотреть, - использовать объект Template и процессор, передавать ваши дополнительные / измененные данные в качестве параметров процессору и элементу, который в противном случае вы бы клонировали в качестве входного элемента. Однако этот подход потребует довольно серьезных модификаций XSL.

Рискну сказать, что использование объекта-шаблона, вероятно, не улучшит скорость. Объект шаблона, вероятно, использует cloneNode или внутренне строит новое дерево DOM.

Azmisov 28.04.2017 02:39

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