28 lines
849 B
TypeScript
28 lines
849 B
TypeScript
// NOTE: 减少 method.ts 打包,故从 hasClosest.ts 中拆分
|
|
export const hasClosestByTag = (element: Node, nodeName: string) => {
|
|
if (!element) {
|
|
return false;
|
|
}
|
|
if (element.nodeType === 3) {
|
|
element = element.parentElement;
|
|
}
|
|
let e = element as HTMLElement;
|
|
let isClosest = false;
|
|
while (e && !isClosest && !e.classList.contains("vditor-reset")) {
|
|
if (e.nodeName.indexOf(nodeName) === 0) {
|
|
isClosest = true;
|
|
} else {
|
|
e = e.parentElement;
|
|
}
|
|
}
|
|
return isClosest && e;
|
|
};
|
|
|
|
export const hasClosestByHeadings = (element: Node) => {
|
|
const headingElement = hasClosestByTag(element, "H");
|
|
if (headingElement && headingElement.tagName.length === 2 && headingElement.tagName !== "HR") {
|
|
return headingElement;
|
|
}
|
|
return false;
|
|
};
|