main
js 32 lines 1.01 KB
Raw
1 /**
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 */
7
8 import {TEXT_NODE} from '../client/HTMLNodeType';
9
10 /**
11 * Gets the target node from a native browser event by accounting for
12 * inconsistencies in browser DOM APIs.
13 *
14 * @param {object} nativeEvent Native browser event.
15 * @return {DOMEventTarget} Target node.
16 */
17 function getEventTarget(nativeEvent) {
18 // Fallback to nativeEvent.srcElement for IE9
19 // https://github.com/facebook/react/issues/12506
20 let target = nativeEvent.target || nativeEvent.srcElement || window;
21
22 // Normalize SVG <use> element events #4963
23 if (target.correspondingUseElement) {
24 target = target.correspondingUseElement;
25 }
26
27 // Safari may fire events on text nodes (Node.TEXT_NODE is 3).
28 // @see http://www.quirksmode.org/js/events_properties.html
29 return target.nodeType === TEXT_NODE ? target.parentNode : target;
30 }
31
32 export default getEventTarget;