跳到主要内容

获取事件的目标

/**
* Gets the target node from a native browser event by accounting for
* inconsistencies in browser DOM APIs.
*
* 通过考虑浏览器 DOM API 的不一致性,从原生浏览器事件中获取目标节点。
*
* @param {object} nativeEvent Native browser event. nativeEvent
* 原生浏览器事件。
* @return {DOMEventTarget} Target node.
* 目标节点。
*/
function getEventTarget(nativeEvent) {
// Fallback to nativeEvent.srcElement for IE9
// 对于 IE9 回退到 nativeEvent.srcElement
// https://github.com/facebook/react/issues/12506
let target = nativeEvent.target || nativeEvent.srcElement || window;

// Normalize SVG <use> element events #4963
// 规范化 SVG <use> 元素事件 #4963
if (target.correspondingUseElement) {
target = target.correspondingUseElement;
}

// Safari may fire events on text nodes (Node.TEXT_NODE is 3).
// Safari 可能会在文本节点上触发事件(Node.TEXT_NODE = 3)。
// @see http://www.quirksmode.org/js/events_properties.html
return target.nodeType === TEXT_NODE ? target.parentNode : target;
}

export default getEventTarget;