javascript - 角度 - DOM .contains() 找不到元素并且 parentNode 为空
问题描述
我想这里很多人都熟悉这个 .contains()
函数,它用于检查元素/节点是否是父节点的子节点。
下面是一个简单的 Angular click-outside 指令,它使用.contains()
.
constructor(private _elRef: ElementRef) {
}
@Output()
public clickOutside = new EventEmitter();
@HostListener('document:click', ['$event.target'])
public onClick(targetElement) {
const clickedInside = this._elRef.nativeElement.contains(targetElement);
if (!clickedInside) {
this.clickOutside.emit(null);
}
}
这很好用,直到当我单击任何 Image 元素时,.contains()
实际上并没有找到它并返回 a false
。例子:
<div id="parent">
...
<button>
<ng-container>
<img id="child" src="...">
</ng-container>
</button>
...
</div>
知道为什么找不到图像元素吗?
解决方案
当 HTML 元素位于ng-container
块内时,该特定 DOM 元素的parentNode
属性为null
. 我怀疑是因为ng-container
块不会生成到 DOM,所以对其父节点的引用被破坏了。
这会阻止 DOM.contains()
函数工作(因为它是基于遍历节点树的)
我将在 Angular GitHub 上报告这个问题。
推荐阅读
- plotly - Plotly 带有虚线或虚线边框的条形图 - 如何实现?
- python - anaconda 上没有出现虚拟环境
- azure - 如何使用 Azure Logic App 将 Http API 响应插入 SQL DB
- javascript - 捕获权限错误问题 discord.js?
- python - 带有数据框的 Python 条形图
- java - 如何在从 JSON 字符串序列化时将杰克逊对象设为可选
- java - 引起:java.lang.IllegalArgumentException:没有注入器工厂绑定到类
- node.js - firebase “where no-in”将当前值添加到数组中
- android - Android Compose 更改点击颜色
- android - 在基本身份验证下保存图像时,Firefox for Android 不发送授权标头