files/en-us/web/api/documentfragment/index.md
{{ APIRef("DOM") }}
The DocumentFragment interface represents a minimal document object that has no parent.
It is used as a lightweight version of {{domxref("Document")}} that stores a segment of a document structure comprised of nodes just like a standard document. The key difference is due to the fact that the document fragment isn't part of the active document tree structure. Changes made to the fragment don't affect the document.
{{InheritanceDiagram}}
DocumentFragment object.This interface has no specific properties, but inherits those of its parent, {{domxref("Node")}}.
DocumentFragment has.DocumentFragment object.DocumentFragment object, or null if there is none.DocumentFragment object, or null if there is none.This interface inherits the methods of its parent, {{domxref("Node")}}.
DocumentFragment, in document order, that matches the specified selectors.DocumentFragment that match the specified selectors.DocumentFragment as a direct child, before a given reference node, without removing and then inserting the node.DocumentFragment with a specified new set of children.DocumentFragment, in document order, that matches the specified ID. Functionally equivalent to {{domxref("Document.getElementById()")}}.A common use for DocumentFragment is to create one, assemble a DOM subtree within it, then append or insert the fragment into the DOM using {{domxref("Node")}} interface methods such as {{domxref("Node.appendChild", "appendChild()")}}, {{domxref("Element.append", "append()")}}, or {{domxref("Node.insertBefore", "insertBefore()")}}. Doing this moves the fragment's nodes into the DOM, leaving behind an empty DocumentFragment.
This interface is also of great use with Web components: {{HTMLElement("template")}} elements contain a DocumentFragment in their {{domxref("HTMLTemplateElement.content")}} property.
An empty DocumentFragment can be created using the {{domxref("document.createDocumentFragment()")}} method or the constructor.
The performance benefit of DocumentFragment is often overstated. In fact, in some engines, using a DocumentFragment is slower than appending to the document in a loop as demonstrated in this benchmark. However, the difference between these examples is so marginal that it's better to optimize for readability than performance.
<ul></ul>
const ul = document.querySelector("ul");
const fruits = ["Apple", "Orange", "Banana", "Melon"];
const fragment = new DocumentFragment();
for (const fruit of fruits) {
const li = document.createElement("li");
li.textContent = fruit;
fragment.append(li);
}
ul.append(fragment);
{{EmbedLiveSample('Example')}}
{{Specifications}}
{{Compat}}