jQuery Selector:选择一个框但不是框内的元素

时间:2012-01-29 14:12:11

标签: javascript jquery selector

我们说我有以下代码:

<div class="body">
  Click me and it will work.
  <div class="head">Click me and nothing will happen.</div>
</div>

我想在.body div中单击而不是在.head div内部时显示“it works”。我怎么能这样做?

使用此代码,即使您点击head

,也会显示日志
<script>
$('.body').click(function(){console.log('it works !');});
</script>

4 个答案:

答案 0 :(得分:3)

$('.body').click(function(e){

if($(e.target).hasClass('body'))
  console.log('it works !');

});

答案 1 :(得分:1)

事件冒泡导致您的麻烦。从本质上讲,你的'head'类的事件处理程序会捕获点击,然后将该事件冒泡到你的'body'处理程序,因为它有嵌套。

Here is an excellent primer on event bubbling, how it works, and how to control event bubbling.

以下是您要测试的jsFiddle example

答案 2 :(得分:0)

它被称为事件冒泡。当你点击“head”div时,你也点击“body”div。

您需要添加:

$('.head').click(function(event){event.stopPropagation()});

防止事件冒泡。

答案 3 :(得分:0)

这是一般解决方案:

$('.body').click(function(e){
    if(e.target === this) {
        console.log('it works !');
    }
});

在stackoverflow上解决了类似的问题: Select only parent, exclude everything else while click()