我正在尝试找到一种纯粹的Angular方法来确定点击的元素是否是另一个元素的子元素。在jQuery中我会做()但不确定在Angular中以哪种方式执行此操作,除了遍历所有子项并进行比较。
jQuery的:
if($(someelement).has(another)) { };
答案 0 :(得分:0)
你可以走另一条路。
您可以询问A是否是B的祖先,而不是询问B是否是A的孩子:
function isAncestor(ancestor, element) {
var parent = element.parentNode;
while (parent && parent!=ancestor) {
parent = parent.parentNode;
}
return parent==ancestor;
}
答案 1 :(得分:0)
我要把它放在这里,因为我试图解决同样的问题并认为它可能对其他人有用,即使它不是{{{ 1}}。
我的第一个解决方案是使用has()
。
如果你正在处理矩形目标,你可以针对Element.getBoundingClientRect()
的边界矩形(这是一个angular.element)检查click事件的x和y
element
IE8 +工作正常,但在5-7
中有一个小错误http://www.quirksmode.org/dom/w3c_cssom.html
令人讨厌的是,如果你的元素包含其他元素,这些元素不会影响它不会起作用的宽度/高度。但你可以使用这个(略微hacky)解决方案
$document.bind('click', function(evt) {
var x = evt.x,
y = evt.y,
rect = element[0].getBoundingClientRect();
if(x > rect.left && x < rect.right && y > rect.top && y < rect.bottom) {
//you've clicked somewhere in the element
}
});