@augment-vir/web
Version:
A collection of augments, helpers types, functions, and classes only for web (frontend) JavaScript environments.
40 lines (39 loc) • 1.14 kB
JavaScript
/**
* Gets the parent element of the current element, even if the current element is a `ShadowRoot`.
*
* @category Web : Elements
* @category Package : @augment-vir/web
* @package [`@augment-vir/web`](https://www.npmjs.com/package/@augment-vir/web)
*/
export function getParentElement(element) {
if (element instanceof ShadowRoot) {
return element.host;
}
const parentNode = element.parentNode;
if (!parentNode) {
return undefined;
}
else if (parentNode instanceof Element) {
return parentNode;
}
else {
return getParentElement(parentNode);
}
}
/**
* Recursively search for an ancestor of the starting element that passes the given callback.
*
* @category Web : Elements
* @category Package : @augment-vir/web
* @package [`@augment-vir/web`](https://www.npmjs.com/package/@augment-vir/web)
*/
export function findMatchingAncestor(start, testParent) {
if (testParent(start)) {
return start;
}
const parent = getParentElement(start);
if (!parent) {
return undefined;
}
return findMatchingAncestor(parent, testParent);
}