axe-core
Version:
Accessibility engine for automated Web UI testing
31 lines (25 loc) • 713 B
JavaScript
import matches from './matches';
/**
* closest implementation that operates on a VirtualNode
*
* @method closest
* @memberof axe.utils
* @param {VirtualNode} vNode VirtualNode to match
* @param {String} selector CSS selector string
* @return {VirtualNode | null}
*/
function closest(vNode, selector) {
while (vNode) {
if (matches(vNode, selector)) {
return vNode;
}
// the top node of the tree will have parent === null, so a
// undefined parent means we are in a disconnected tree
if (typeof vNode.parent === 'undefined') {
throw new TypeError('Cannot resolve parent for non-DOM nodes');
}
vNode = vNode.parent;
}
return null;
}
export default closest;