【发布时间】:2020-07-08 15:28:14
【问题描述】:
const findClosestParent = (startElement, fn) => {
const parent = startElement.parentElement;
if (!parent) return undefined;
return fn(parent) ? parent : findClosestParent(parent, fn);
};
$document.on('click', event => {
let target = event.target;
if (findClosestParent(target, parent => parent.classList.contains('.calendar')) {
// do some things
}
});
我试图找出一个元素是否在另一个元素中。我不能在 Internet Explorer 11 中使用最接近的方法。所以我走上了创建递归搜索 DOM 树函数的路线。但是,我也不能简单地使用 jQuery 的 event.target property 在 Angular js 控制器中获取 Internet Explorer 11 中目标事件元素的父元素。这确实 sn-p 不起作用,因为无论我点击什么,findClosestParent 中的startElement.parentElement 始终为空。此外,startElement.parentNode 为空。 event.currentTarget.parentNode 为空。我已经尝试了很多东西。没有任何效果。我尝试过的另一件事是,我不能简单地将 id 添加到我尝试选择的 div 并使用纯 vanilla js getElementById 查询选择器,因为这些元素在第 3 方库中被抽象出来。我非常希望能够使用事件目标或类似的东西来让我在 IE11 中使用 dang 元素。
我认为归结为这样一个事实,根据https://developer.mozilla.org/en-US/docs/Web/API/Node/parentElement,对于 IE,parentElement 是“仅在 Element 上支持”。这就是它所说的......这意味着我认为 Internet Explorer 不认为 event.target 是“Element”。
【问题讨论】:
-
我的回答终于解决了你的问题吗?
标签: javascript jquery angularjs internet-explorer-11 jquery-events