@augment-vir/test
Version:
A universal testing suite that works with Mocha style test runners _and_ Node.js's built-in test runner.
29 lines (28 loc) • 1.1 kB
JavaScript
/**
* 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) => recursivelyExtractElementText(childNode));
}
}
return [];
}