happy-dom
Version:
Happy DOM is a JavaScript implementation of a web browser without its graphical user interface. It includes many web standards from WHATWG DOM and HTML.
40 lines (36 loc) • 1.21 kB
text/typescript
import Document from '../document/Document.js';
import HTMLElement from '../html-element/HTMLElement.js';
import HTMLLabelElement from './HTMLLabelElement.js';
import NodeList from '../node/NodeList.js';
import ShadowRoot from '../shadow-root/ShadowRoot.js';
import * as PropertySymbol from '../../PropertySymbol.js';
/**
* Utility for finding labels associated with a form element.
*/
export default class HTMLLabelElementUtility {
/**
* Returns label elements for a form element.
*
* @param element Element to get labels for.
* @returns Label elements.
*/
public static getAssociatedLabelElements(element: HTMLElement): NodeList<HTMLLabelElement> {
const id = element.id;
let labels: NodeList<HTMLLabelElement>;
if (id) {
const rootNode = <Document | ShadowRoot>element.getRootNode();
labels = <NodeList<HTMLLabelElement>>rootNode.querySelectorAll(`label[for="${id}"]`);
} else {
labels = new NodeList<HTMLLabelElement>();
}
let parent = element[PropertySymbol.parentNode];
while (parent) {
if (parent['tagName'] === 'LABEL') {
labels.push(<HTMLLabelElement>parent);
break;
}
parent = parent[PropertySymbol.parentNode];
}
return labels;
}
}