diff --git a/plugins/removeUselessDefs.js b/plugins/removeUselessDefs.js
index 5d19810e3..9091eeb89 100644
--- a/plugins/removeUselessDefs.js
+++ b/plugins/removeUselessDefs.js
@@ -21,7 +21,11 @@ exports.fn = () => {
return {
element: {
enter: (node, parentNode) => {
- if (node.name === 'defs') {
+ if (
+ node.name === 'defs' ||
+ (elemsGroups.nonRendering.has(node.name) &&
+ node.attributes.id == null)
+ ) {
/**
* @type {XastElement[]}
*/
@@ -38,11 +42,6 @@ exports.fn = () => {
});
}
node.children = usefulNodes;
- } else if (
- elemsGroups.nonRendering.has(node.name) &&
- node.attributes.id == null
- ) {
- detachNodeFromParent(node, parentNode);
}
},
},
diff --git a/test/plugins/removeUselessDefs.04.svg b/test/plugins/removeUselessDefs.04.svg
new file mode 100644
index 000000000..84e729072
--- /dev/null
+++ b/test/plugins/removeUselessDefs.04.svg
@@ -0,0 +1,23 @@
+Don't remove non-rendering elements if children have IDs.
+
+===
+
+
+
+@@@
+
+
\ No newline at end of file
diff --git a/test/plugins/removeUselessDefs.05.svg b/test/plugins/removeUselessDefs.05.svg
new file mode 100644
index 000000000..ef3557e0a
--- /dev/null
+++ b/test/plugins/removeUselessDefs.05.svg
@@ -0,0 +1,23 @@
+Don't remove used symbols.
+
+===
+
+
+
+@@@
+
+
\ No newline at end of file