generate DOMNode from string
Dec 15, 2023
1 minute to read
export function stringToHtml(html: string): ChildNode {
var template = document.createElement('template')
html = html.trim() // Never return a text node of whitespace
template.innerHTML = html
return template.content.firstChild
}
If we now run the following string through it:
'<div><span>nested</span> <span>stuff</span></div>'
it nicely produces…
<div>
<span>nested</span>
<span>stuff</span>
</div>
So we get back the expected HTML as a Node, which is ready to be appended to a parent element.
Do not set it with innerHTML
unless you’re absolutely sure you have 100% control over its contents.
const div = stringToHtml('<div><span>nested</span> <span>stuff</span></div>')
document.body.appendChild(div)
This is super useful in some vanilla JS projects, where you don’t want to generate 20 divs by hand and append each to their respective parent element to ensure proper nesting. For example, it has come in handy in a browser extension when setting up components for the content script.