--- title: DocumentFragment slug: Web/API/DocumentFragment tags: - API - DOM - DocumentFragment - 参考 - 接口 translation_of: Web/API/DocumentFragment ---
DocumentFragment
,文档片段接口,一个没有父对象的最小文档对象。它被作为一个轻量版的 {{domxref("Document")}} 使用,就像标准的document一样,存储由节点(nodes)组成的文档结构。与document相比,最大的区别是DocumentFragment 不是真实 DOM 树的一部分,它的变化不会触发 DOM 树的{{Glossary("reflow", "重新渲染")}},且不会导致性能等问题。
最常用的方法是使用文档片段作为参数(例如,任何 {{domxref("Node")}} 接口类似 {{domxref("Node.appendChild")}} 和 {{domxref("Node.insertBefore")}} 的方法),这种情况下被添加(append)或被插入(inserted)的是片段的所有子节点, 而非片段本身。因为所有的节点会被一次插入到文档中,而这个操作仅发生一个重渲染的操作,而不是每个节点分别被插入到文档中,因为后者会发生多次重渲染的操作。
该接口在 Web 组件(Web components)中也非常有用:{{HTMLElement("template")}} 元素在其 {{domxref("HTMLTemplateElement.content")}} 属性中包含了一个 DocumentFragment
。
可以使用{{domxref("document.createDocumentFragment")}} 方法或者构造函数来创建一个空的 DocumentFragment
。
该接口没有特殊的属性,其属性都继承自 {{domxref("Node")}} ,并补充了 {{domxref("ParentNode")}} 接口中的属性。
DocumentFragment
的{{domxref("Element","元素")}}类型的子对象。DocumentFragment
的第一个 {{domxref("Element")}} 类型的子对象,如果没有则返回 null
。DocumentFragment
的最后一个 {{domxref("Element")}} 类型的子对象,如果没有则返回 null
。unsigned long
给出 DocumentFragment
拥有的子项数量。DocumentFragment
对象。该接口继承 {{domxref("Node")}} 的全部方法,并实现了 {{domxref("ParentNode")}} 接口中的方法。
DocumentFragment
中以文档顺序排列的第一个符合指定选择器的Element
节点。DocumentFragment
中所有的符合指定选择器的Element
节点组成的NodeList
数组。DocumentFragment
中以文档顺序排列的第一个符合指定ID选择器的Element
节点。与Document.getElementById()
作用相同。<ul id="list"></ul>
const list = document.querySelector('#list'); const fruits = ['Apple', 'Orange', 'Banana', 'Melon']; const fragment = document.createDocumentFragment(); fruits.forEach(fruit => { const li = document.createElement('li'); li.innerHTML = fruit; fragment.appendChild(li); }); list.appendChild(fragment);
{{EmbedLiveSample('Example')}}
Specification | Status | Comment |
---|---|---|
{{SpecName('DOM WHATWG', '#interface-documentfragment', 'DocumentFragment')}} | {{Spec2('DOM WHATWG')}} | 添加了构建函数和对 {{domxref("ParentNode")}} 的实现。 |
{{SpecName('Selectors API Level 1', '#the-apis', 'DocumentFragment')}} | {{Spec2('Selectors API Level 1')}} | 添加 querySelector() 和 querySelectorAll() 方法。 |
{{SpecName('DOM3 Core', 'core.html#ID-B63ED1A3', 'DocumentFragment')}} | {{Spec2('DOM3 Core')}} | 和 {{SpecName('DOM2 Core')}} 一样 |
{{SpecName('DOM2 Core', 'core.html#ID-B63ED1A3', 'DocumentFragment')}} | {{Spec2('DOM2 Core')}} | 和 {{SpecName('DOM1')}} 一样 |
{{SpecName('DOM1', 'level-one-core.html#ID-B63ED1A3', 'DocumentFragment')}} | {{Spec2('DOM1')}} | 最初的定义。 |
{{Compat("api.DocumentFragment")}}