diff --git a/packages/parse5/lib/serializer/index.test.ts b/packages/parse5/lib/serializer/index.test.ts
index 233419ea4..5d9dc5516 100644
--- a/packages/parse5/lib/serializer/index.test.ts
+++ b/packages/parse5/lib/serializer/index.test.ts
@@ -33,4 +33,13 @@ describe('serializer', () => {
assert.equal(html, '
');
});
});
+
+ it('serializes elements inner content', () => {
+ const document = parse5.parseFragment('');
+ const template = document.childNodes[0];
+ assert.ok(isElementNode(template));
+ const html = parse5.serialize(template);
+
+ assert.equal(html, '');
+ });
});
diff --git a/packages/parse5/lib/serializer/index.ts b/packages/parse5/lib/serializer/index.ts
index 6019a0286..65a9ca57b 100644
--- a/packages/parse5/lib/serializer/index.ts
+++ b/packages/parse5/lib/serializer/index.ts
@@ -114,7 +114,14 @@ function serializeChildNodes(
options: InternalOptions
): string {
let html = '';
- const childNodes = options.treeAdapter.getChildNodes(parentNode);
+ // Get container of the child nodes
+ const container =
+ options.treeAdapter.isElementNode(parentNode) &&
+ options.treeAdapter.getTagName(parentNode) === $.TEMPLATE &&
+ options.treeAdapter.getNamespaceURI(parentNode) === NS.HTML
+ ? options.treeAdapter.getTemplateContent(parentNode)
+ : parentNode;
+ const childNodes = options.treeAdapter.getChildNodes(container);
if (childNodes) {
for (const currentNode of childNodes) {
@@ -139,13 +146,7 @@ function serializeElement(node: T['element'], opti
return `<${tn}${serializeAttributes(node, options)}>${
options.treeAdapter.getNamespaceURI(node) === NS.HTML && VOID_ELEMENTS.has(tn)
? ''
- : `${serializeChildNodes(
- // Get container of the child nodes
- tn === $.TEMPLATE && options.treeAdapter.getNamespaceURI(node) === NS.HTML
- ? options.treeAdapter.getTemplateContent(node)
- : node,
- options
- )}${tn}>`
+ : `${serializeChildNodes(node, options)}${tn}>`
}`;
}