Javascript 角度-是其他元素的子元素
我试图找到一种纯角度的方法来确定单击的元素是否是另一个元素的子元素。在jQuery中,除了遍历所有子对象并进行比较外,我还可以使用has()但不确定使用Angular的哪种方法 jQuery:Javascript 角度-是其他元素的子元素,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,我试图找到一种纯角度的方法来确定单击的元素是否是另一个元素的子元素。在jQuery中,除了遍历所有子对象并进行比较外,我还可以使用has()但不确定使用Angular的哪种方法 jQuery: if($(someelement).has(another)) { }; 你可以走另一条路 不必询问B是否是a的孩子,您可以询问a是否是B的祖先: function isAncestor(ancestor, element) { var parent = element.parentNode;
if($(someelement).has(another)) { };
你可以走另一条路 不必询问B是否是a的孩子,您可以询问a是否是B的祖先:
function isAncestor(ancestor, element) {
var parent = element.parentNode;
while (parent && parent!=ancestor) {
parent = parent.parentNode;
}
return parent==ancestor;
}
我将把它放在这里,因为我正试图解决同样的问题,并认为它可能对其他人有用,即使它不是
has()
的严格替代品
我的第一个解决方案是使用Element.getBoundingClientRect()
如果您处理的是矩形目标,您可以对照元素
的边界矩形检查单击事件的x和y(这是一个角度.element)
你的用例是什么?我正在重新编写引导clickover(花式popover)插件。我需要确定主体是否被点击,但检查点击的不是popover本身。正在尝试执行“单击任意位置并关闭”功能。在上面的代码中,“someelement”是元素popover div-“另一个”是body click函数的返回值-,我检测body click没有问题,但是has()行让我难住了。为什么不在
$document
中添加一个click处理程序呢?这就是下拉切换的工作原理——将其添加到popover插件中应该非常简单(如两行或三行代码)。您是否支持ie<9?您可以使用AngularJs内置jqLite提供的方法“jqLite是jQuery的一个与API兼容的小子集,允许Angular操作DOM”
$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
}
});
link: function(scope, element, attrs) {
var clicked = false;
element.on('click', eClickHandler);
$document.on('click', clickHandler);
function eClickHandler(event) {
clicked = true;
$timeout(function() {
clicked = false;
});
}
function clickHandler(event) {
if(!clicked) {
// click occurred outside
}
}
}