The Range.extractContents()
method moves contents of the Range
from the document tree into a DocumentFragment
.
Event listeners added using DOM Events are not retained during extraction. HTML attribute events are retained or duplicated as they are for the Node.cloneNode()
method. HTML id
attributes are also cloned, which can lead to an invalid document if a partially-selected node is extracted and appended to the document.
Partially selected nodes are cloned to include the parent tags necessary to make the document fragment valid.
Syntax
documentFragment = range.extractContents();
Example
Basic example
var range = document.createRange(); range.selectNode(document.getElementsByTagName("div").item(0)); var documentFragment = range.extractContents(); document.body.appendChild(documentFragment);
Moving items between containers
This example lets you move items between two containers. Select one or more item, and then click "swap" to move them to the opposite container.
HTML
<p id="list1">123456</p> <button id="swap">Swap selected item(s)</button> <p id="list2">abcdef</p>
CSS
body { pointer-events: none; } p { border: 1px solid; font-size: 2em; padding: .3em; } button { font-size: 1.2em; padding: .5em; pointer-events: auto; }
JavaScript
const list1 = document.getElementById('list1'); const list2 = document.getElementById('list2'); const button = document.getElementById('swap'); button.addEventListener('click', e => { selection = window.getSelection(); for (let i = 0; i < selection.rangeCount; i++) { const range = selection.getRangeAt(i); if (range.commonAncestorContainer === list1 || range.commonAncestorContainer.parentNode === list1) { const documentFragment = range.extractContents(); list2.appendChild(documentFragment); } else if (range.commonAncestorContainer === list2 || range.commonAncestorContainer.parentNode === list2) { const documentFragment = range.extractContents(); list1.appendChild(documentFragment); } } });
Result
Specifications
Specification | Status | Comment |
---|---|---|
DOM The definition of 'Range.extractContents()' in that specification. |
Living Standard | No change. |
Document Object Model (DOM) Level 2 Traversal and Range Specification The definition of 'Range.extractContents()' in that specification. |
Obsolete | Initial specification. |
Browser compatibility
The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
Desktop | Mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
extractContents | Chrome Full support Yes | Edge Full support 12 | Firefox Full support 4 | IE Full support 9 | Opera Full support 9 | Safari Full support Yes | WebView Android Full support Yes | Chrome Android Full support Yes | Firefox Android Full support 4 | Opera Android Full support Yes | Safari iOS Full support Yes | Samsung Internet Android Full support Yes |
Legend
- Full support
- Full support