Converting Range or DocumentFragment to string Converting Range or DocumentFragment to string javascript javascript

Converting Range or DocumentFragment to string


FWIW, the jQuery way:

$('<div>').append(fragment).html()


To spell out an example from here:

//Example setup of a fragment var frag = document.createDocumentFragment(); //make your fragment var p = document.createElement('p'); //create <p>test</p> DOM nodep.textContent = 'test';frag.appendChild( p  ); //Outputting the fragment content using a throwaway intermediary DOM element (div):var div = document.createElement('div');div.appendChild( frag.cloneNode(true) );console.log(div.innerHTML); //output should be '<p>test</p>'


So, how to get the string of the html of a Range or DocFrag?

Contrary to the other responses, it is possible to directly turn a DocumentFragment object into a DOMString using the XMLSerializer.prototype.serializeToString method described at https://w3c.github.io/DOM-Parsing/#the-xmlserializer-interface.

To get the DOMString of a Range object, simply convert it to a DocumentFragment using either of the Range.prototype.cloneContents or Range.prototype.extractContents methods and then follow the procedure for a DocumentFragment object.

I've attached a demo, but the gist of it is in these two lines:

const serializer = new XMLSerializer();const document_fragment_string = serializer.serializeToString(document_fragment);

(() => {	"use strict";	const HTML_namespace = "http://www.w3.org/1999/xhtml";	document.addEventListener("DOMContentLoaded", () => {		/* Create Hypothetical User Range: */		const selection = document.defaultView.getSelection();		const user_range_paragraph = document.getElementById("paragraph");		const user_range = document.createRange();		user_range.setStart(user_range_paragraph.firstChild, 0);		user_range.setEnd(user_range_paragraph.lastChild, user_range_paragraph.lastChild.length || user_range_paragraph.lastChild.childNodes.length);		selection.addRange(user_range);		/* Clone Hypothetical User Range: */		user_range.setStart(selection.anchorNode, selection.anchorOffset);		user_range.setEnd(selection.focusNode, selection.focusOffset);		const document_fragment = user_range.cloneContents();		/* Serialize the User Range to a String: */		const serializer = new XMLSerializer();		const document_fragment_string = serializer.serializeToString(document_fragment);		/* Output the Serialized User Range: */		const output_paragraph = document.createElementNS(HTML_namespace, "p");		const output_paragraph_code = document.createElementNS(HTML_namespace, "code");		output_paragraph_code.append(document_fragment_string);		output_paragraph.append(output_paragraph_code);		document.body.append(output_paragraph);	}, { "once": true });})();
<p id="paragraph">Hello <b>World</b></p>