fix: #1868 Clone node, Setting className for SVG element raises error (#2079)

* fix: #1868 Clone node, Setting className for SVG element raises error

* fix: svg element type information
This commit is contained in:
Niklas von Hertzen
2019-11-25 20:55:28 -08:00
committed by GitHub
parent e4d52a1ac6
commit f139b513c5
3 changed files with 15 additions and 3 deletions

View File

@@ -8,6 +8,7 @@ import {
isScriptElement,
isSelectElement,
isStyleElement,
isSVGElementNode,
isTextareaElement,
isTextNode
} from './node-parser';
@@ -409,10 +410,17 @@ export class DocumentCloner {
});
anonymousReplacedElement.className = `${PSEUDO_HIDE_ELEMENT_CLASS_BEFORE} ${PSEUDO_HIDE_ELEMENT_CLASS_AFTER}`;
clone.className +=
const newClassName =
pseudoElt === PseudoElementType.BEFORE
? ` ${PSEUDO_HIDE_ELEMENT_CLASS_BEFORE}`
: ` ${PSEUDO_HIDE_ELEMENT_CLASS_AFTER}`;
if (isSVGElementNode(clone)) {
clone.className.baseValue += newClassName;
} else {
clone.className += newClassName;
}
return anonymousReplacedElement;
}

View File

@@ -103,7 +103,8 @@ export const isTextNode = (node: Node): node is Text => node.nodeType === Node.T
export const isElementNode = (node: Node): node is Element => node.nodeType === Node.ELEMENT_NODE;
export const isHTMLElementNode = (node: Node): node is HTMLElement =>
typeof (node as HTMLElement).style !== 'undefined';
export const isSVGElementNode = (element: Element): element is SVGElement =>
typeof (element as SVGElement).className === 'object';
export const isLIElement = (node: Element): node is HTMLLIElement => node.tagName === 'LI';
export const isOLElement = (node: Element): node is HTMLOListElement => node.tagName === 'OL';
export const isInputElement = (node: Element): node is HTMLInputElement => node.tagName === 'INPUT';