Skip to content

Commit 5b64055

Browse files
authored
small change for escaping (#107)
1 parent a1fe761 commit 5b64055

File tree

1 file changed

+27
-4
lines changed

1 file changed

+27
-4
lines changed

src/visual_editor/lib/getSelector.ts

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,33 @@ export default function getSelector(
1212
attr: (name) => false, // ignore all attributes
1313
});
1414
} catch (e) {
15-
selector =
16-
element.tagName.toLowerCase() +
17-
(element.id ? `#${element.id}` : "") +
18-
(element.className ? `.${element.className}` : "");
15+
selector = getFallbackSelector(element);
1916
}
2017
return selector;
2118
}
19+
20+
function getFallbackSelector(element: Element): string {
21+
const tagName = element.tagName.toLowerCase();
22+
const id = element.id ? `#${CSS.escape(element.id)}` : "";
23+
24+
// Handle both string className (HTML elements) and SVGAnimatedString (SVG elements)
25+
let classes = "";
26+
if (element.className) {
27+
let classNameStr = "";
28+
if (typeof element.className === "string") {
29+
classNameStr = element.className;
30+
} else if (typeof element.className === "object" && "baseVal" in element.className) {
31+
// SVG element with SVGAnimatedString
32+
classNameStr = (element.className as any).baseVal;
33+
}
34+
35+
classes = classNameStr
36+
? classNameStr
37+
.split(' ')
38+
.filter(Boolean)
39+
.map(c => `.${CSS.escape(c)}`)
40+
.join('')
41+
: "";
42+
}
43+
return tagName + id + classes;
44+
}

0 commit comments

Comments
 (0)