В этом руководстве вы узнаете об интерфейсе JavaScript DocumentFragment
для создания узлов DOM и обновления их до активного дерева DOM.
Интерфейс DocumentFragment
— это упрощенная версия Document
, в которой хранится часть структуры документа, как в стандартном документе. Однако он не является частью активного дерева DOM.
Если вы вносите изменения в фрагмент документа, это не влияет на документ и на производительность.
Как правило, вы используете DocumentFragment
для создания узлов DOM и добавления или вставки их в активное дерево DOM с помощью appendChild()
или insertBefore()
.
Чтобы создать новый фрагмент документа, используйте конструктор следующим образом:
let fragment = new DocumentFragment();
Или вы можете использовать метод createDocumentFragment()
объекта Document
:
let fragment = document.createDocumentFragment();
Этот DocumentFragment
наследует методы своего родителя Node
, а также реализует методы интерфейса ParentNode
, такие как querySelector()
и querySelectorAll()
.
Пример
Предположим, что у вас есть элемент <ul>
с идентификатором language
:
<ul id="language"></ul>
Следующий код создает список элементов <li>
( <li>
) и добавляет каждый элемент к элементу <ul>
с помощью DocumentFragment
:
let languages = ['JS', 'TypeScript', 'Elm', 'Dart','Scala']; let langEl = document.querySelector('#language') let fragment = new DocumentFragment(); languages.forEach((language) => { let li = document.createElement('li'); li.innerHTML = language; fragment.appendChild(li); }) langEl.appendChild(fragment);
Как это работает:
- Сначала выберите элемент
<ul>
по его идентификатору с помощью методаquerySelector()
. - Во-вторых, создайте новый document fragment.
- В-третьих, для каждого элемента в массиве
languages
создайте элемент элемента списка, назначьтеinnerHTML
элемента спискаlanguage
и добавьте все вновь созданные элементы списка к фрагменту документа. - Наконец, добавьте фрагмент документа к элементу
<ul>
.
Соединим все это вместе:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>DocumentFragment Demo</title> </head> <body> <ul id="language"></ul> <script> let languages = ['JS', 'TypeScript', 'Elm', 'Dart', 'Scala']; let langEl = document.querySelector('#language'); let fragment = new DocumentFragment(); languages.forEach((language) => { let li = document.createElement('li'); li.innerHTML = language; fragment.appendChild(li); }) langEl.appendChild(fragment); </script> </body> </html>