jQuery事件目标是一个元素的子节点吗?

13

给定包含JavaScript对象/DOM元素的变量element,如何确定event.target是否是element内部的元素?

function(event){
   // assume that var element exists in this scope
   if(event.target == a_child_of(element))
      // do something
}


<div id="myDiv">
   <div class="innerDiv">
      <input type="text"/>
   </div>
</div>
如果elementmyDiv,则发生在内部div或输入框或任何可能存在于myDiv内的元素上的事件都应使语句求值为true。我想我可以使用递归函数来构建子元素的数组,然后检查event.target是否在数组中,但我想先看看是否有更简单的答案。
2个回答

40

你也可以使用 .has() 方法。

if ($(element).has(e.target).length > 0){
//
}

11
在遇到类似问题后重新审视此问题,似乎SLaks的答案只适用于直接子元素,而Musa的则适用于所有后代。如果你想检查所点击的元素是否包含在给定父元素内的任何一级中,则这是正确的代码。两种方法都适用于单层子元素,如果你知道只需要检查一级子元素,则SLaks的答案可能更有效率。 - Nick
1
另外,如果您想检查“我的事件是否发生在元素上”,请不要忘记将 e.target != $(element)[0] 添加到条件中。 - adriendenat

14

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接