Javascript 一旦jquery事件传递给函数,console.log($(this));不再打印jquery对象

Javascript 一旦jquery事件传递给函数,console.log($(this));不再打印jquery对象,javascript,jquery,jsbin,Javascript,Jquery,Jsbin,当我在一些div上附加一个click偶数时,我可以在Chrome控制台中打印出$(this),并在那里显示jquery对象 但是,我尝试只获取被单击的最顶端的dom节点。所以我想在函数中使用stopPropagation() $(document).ready(function(){ $('body').on('click', '*', function(){ console.log($(this)); }); }); 但每当我将事件传递到函数中时 $('body')。在(

当我在一些div上附加一个click偶数时,我可以在Chrome控制台中打印出
$(this)
,并在那里显示jquery对象

但是,我尝试只获取被单击的最顶端的dom节点。所以我想在函数中使用
stopPropagation()

$(document).ready(function(){
  $('body').on('click', '*', function(){
    console.log($(this));
  });
});
但每当我将事件传递到函数中时
$('body')。在('click','*',函数(事件){

我将
$(此)
作为
[object object]
打印到控制台。奇怪的是,当我随后从函数中删除
事件和
事件。stopPropagation()
时,控制台仍然打印
[object object]

我只是试图注册对身体每个部分的点击,除非它发生在类为
avoid
的div上,但我似乎没有掌握jquery
事件及其对应的
stopPropagation()
$(这)
如何从我可以看到的jquery对象变为一个
[object object]
何时传入
事件
?如何使用它仅注册
避免类中未发生的单击

$("body").on('click', '*' ...
每个元素的代表。我认为您只想这样做:

$("body").on('click', '.avoid', function (e) {
   e.stopPropagation();
}).on('click', function () {
   console.log('body clicked');
});

您走对了方向,只需将
stopPropagation()
绑定到特定事件,如下所示:

$(document).ready(function(){
  $('body').on('click', '*', function(e){
    console.log($(this));
    e.stopPropagation();
  });
});
其中
e
是事件对象。现在工作正常。下面是更新的jsbin:
我想他也想对点击的对象进行标识

$(document).ready(function(){
  $('body > *').click(function(){
    console.log( $(this) );
  });
});

这确实是我想要做的,谢谢。把
on()
s链接在一起的意义是什么?这是怎么工作的?@thomas:这和
$('body')是一样的。on(…);$('body')。on(…);
(即调用
。on
on
body
两次)。这是因为
上的
返回
(指
$('body')
)。此概念通过方法链接称为fluent interface:。请记住,如果确实希望传播,但希望隔离单击的元素以记录它,则会停止传播,例如
如果(e.target==this){console.log($(this);}
@poplane谢谢你。应该首先
this
$(this)
吗?我似乎无法让它做任何事情。它似乎无法让它做任何事情,因为你可能还没有在
函数()中添加e来使它成为
函数(e)
对于调试对象,
console.dir
有时更适合。