import IDocument from '../document/IDocument.js'; import IHTMLElement from '../html-element/IHTMLElement.js'; import IHTMLLabelElement from './IHTMLLabelElement.js'; import INodeList from '../node/INodeList.js'; import NodeList from '../node/NodeList.js'; import IShadowRoot from '../shadow-root/IShadowRoot.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: IHTMLElement): INodeList { const id = element.id; let labels: INodeList; if (id) { const rootNode = element.getRootNode(); labels = >rootNode.querySelectorAll(`label[for="${id}"]`); } else { labels = new NodeList(); } let parent = element[PropertySymbol.parentNode]; while (parent) { if (parent['tagName'] === 'LABEL') { labels.push(parent); break; } parent = parent[PropertySymbol.parentNode]; } return labels; } }