UNPKG

@augment-vir/web

Version:

A collection of augments, helpers types, functions, and classes only for web (frontend) JavaScript environments.

31 lines (30 loc) 1.14 kB
/** * Extracts the text content of the given element. * * @category Web : Elements * @category Package : @augment-vir/web * @package [`@augment-vir/web`](https://www.npmjs.com/package/@augment-vir/web) */ export function extractElementText(element) { return recursivelyExtractElementText(element).join('\n'); } function recursivelyExtractElementText(node) { if (node.nodeType === Node.TEXT_NODE) { const text = node.textContent?.trim(); return text ? [text] : []; } else if (node.nodeType === Node.ELEMENT_NODE) { const element = node; if (element.tagName.toLowerCase() === 'slot') { const slotElement = element; const assignedNodes = slotElement.assignedNodes(); return (assignedNodes.length ? assignedNodes : Array.from(element.childNodes)).flatMap((assignedNode) => recursivelyExtractElementText(assignedNode)); } else { return Array.from((element.shadowRoot || element).childNodes).flatMap((childNode) => { return recursivelyExtractElementText(childNode); }); } } return []; }