You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					20 lines
				
				599 B
			
		
		
			
		
	
	
					20 lines
				
				599 B
			| 
											3 years ago
										 | import matches from './matches'; | ||
|  | /** | ||
|  |  * Returns the closest parent element that matches a given selector. | ||
|  |  *  | ||
|  |  * @param node the reference element | ||
|  |  * @param selector the selector to match | ||
|  |  * @param stopAt stop traversing when this element is found | ||
|  |  */ | ||
|  | 
 | ||
|  | export default function closest(node, selector, stopAt) { | ||
|  |   if (node.closest && !stopAt) node.closest(selector); | ||
|  |   var nextNode = node; | ||
|  | 
 | ||
|  |   do { | ||
|  |     if (matches(nextNode, selector)) return nextNode; | ||
|  |     nextNode = nextNode.parentElement; | ||
|  |   } while (nextNode && nextNode !== stopAt && nextNode.nodeType === document.ELEMENT_NODE); | ||
|  | 
 | ||
|  |   return null; | ||
|  | } |