Javascript jQuery在父元素上单击事件,但查找子元素(单击)

Javascript jQuery在父元素上单击事件,但查找子元素(单击),javascript,jquery,events,dom,Javascript,Jquery,Events,Dom,假设我有一个父元素,它本身有很多嵌套的子元素: <div id="p"> <div id="c1"> <div id="c2"></div> <div id="c3"></div> </div id="c4"> <div id="c5"></div> </div> </div> 因为事件被分配

假设我有一个父元素,它本身有很多嵌套的子元素:

<div id="p">
    <div id="c1">
        <div id="c2"></div>
        <div id="c3"></div>
    </div id="c4">
        <div id="c5"></div>
    </div>
</div>
因为事件被分配给父元素,所以我总是可以看到父id,但是,我想知道是否有任何可能的方法来找出哪些子元素被单击了


我也无法将任何事件分配给子元素或从父div中删除事件侦听器。

您需要将事件对象传递给函数以获取触发事件的项,event.target将为您提供源元素

 $('#p').bind('click', function(event) {
    alert(event.target.id);
 });
$('#p').bind('click', function(event) {
    alert($(event.target).attr('id'));
});

 $('#p').bind('click', function(event) {
    alert(event.target.id);
 });
$('#p').bind('click', function(event) {
    alert($(event.target).attr('id'));
});
编辑


第一种方法
event.target.id
优于第二种方法
$(event.target).attr('id')
,以提高性能、简单性和可读性

您可以尝试下面的代码。也可以尝试JSFIDLE(演示)

第二个问题的答案是,您可以将事件分配给子级并从其父级中删除。看看这个

.stopPropagation(); 
防止事件在DOM树中冒泡,防止任何 父处理程序不会收到事件通知

如果希望只执行特定事件,不允许触发其他事件,请使用下面的代码

event.stopImmediatePropagation()
防止执行其余的处理程序,并防止事件在DOM树中冒泡


我希望这能解决你的问题。如果你有任何问题,请不要犹豫。谢谢

如果你的元素有孙子,有一个更好的方法只得到孩子。注意大于号

$('.parent > .child').click(function() {
    // This will be the child even if grandchild is clicked
    console.log($(this));
});

谢谢你,伙计,这很有效!:)。。。我应该等着接受你的回答!对于记录,
$(event.target).attr('id')
event.target.id
的慢得多的版本-请参阅并搜索
Sizzle.attr=function
。jQuery(或者更确切地说,Sizzle)必须通过所有代码来获取您的id,而只需使用DOM就可以直接为您获取id。这对我很有用+1.