Полагаю, что цель DocumentFragment состоит в том, чтобы иметь возможность конструировать содержимое, не касаясь DOM, пока оно не будет готово к работе.JavaScript: Копировать узел в DocumentFragment
Учитывая, что DocumentFragment не поддерживает innerHTML
, это может быть немного утомительно. С другой стороны, после его создания легко добавить содержимое к существующему узлу DOM самим фрагментом.
Если я создаю div
, не добавляя его в DOM, я могу заполнить его, как мне нравится, в том числе innerHTML
. Насколько я могу судить, он не должен оказывать дополнительного влияния на производительность.
Есть ли простой способ (то есть в одной строке или около того) скопировать содержимое существующего узла DOM в DocumentFragment? Процесс будет выглядеть так:
var div=document.createElement('div');
var fragment=document.createDocumentFragment();
div.innerHTML='…';
// copy contents to fragment
// etc
Таким образом, я мог бы иметь лучшее из обоих миров.
Ответ
Вот ответ на @KevBot ниже включены в пример:
var divTest=document.querySelector('div#test');
var html='<p>One</p><p>Two</p>';
var fragment=document.createRange().createContextualFragment(html);
divTest.appendChild(fragment);
Мне нравится этот вопрос, некоторые из этих решений реализуют некоторые неясные JavaScript. – zer00ne
* Если я создаю div без добавления его в DOM, я могу заполнить его, как мне нравится, включая innerHTML. Насколько я могу судить, это не должно оказывать никакого дополнительного влияния на производительность. * Разница между div и docFrag заключается в том, что когда вы добавляете div в DOM, он остается там со всем, что вы добавили к нему. С docFrag вы добавляете его в DOM, и все, что вы добавили к нему, находится в DOM, но docFrag - нет. Как будто это тряпка скатертей, когда вы выдергиваете скатерть, но оставляйте тарелки на столе. – zer00ne