jquery中的$(this)和e.target或event.target有何区别?

4

何时使用 $(this) 和 e.target?

对于 $(this),我没有疑惑,但是 e.target 对我来说很困惑,因为它可以执行与 $(this) 相同的操作。(或者我错了?)

$(document).on('click',"div", function(){
        $(this).css('color', 'red');
    }
});

vs

$(document).on('click',"div", function(e){
        $(e.target).css('color', 'red');
    }
});
2个回答

8

如果您点击与事件绑定的元素,则它们将相同。然而,如果您点击一个子元素并且它冒泡,则this指的是此处理程序绑定到的元素,e.target仍然指的是事件起源的元素。


您可以通过 JavaScript 检测它:e.target==this 或适用于较旧版本的 IE e.srcElement ? e.srcElement==this : e.target==this - dgo

3

e.target属性可以是注册事件的元素,也可以是该元素的后代。你可以将其与$(this)进行比较,以确定是否由于事件冒泡而发生了事件委托。


那个元素的后代?为什么?所以你是想说 e.target 更好,因为它可以防止事件冒泡问题? - user2743278
不,我不是说其中一个比另一个更好...你可以使用e.target来获取触发事件的子元素。如果你想停止事件冒泡,你需要调用e.stopPropagation()。 - zoranc
你的示例没有显示是否使用了任何子元素,因此假设它只是一个没有子元素的元素,e.target和$(this)将指向触发事件的同一元素。 - zoranc
确实,不是“更好”也不是“更差”,而是“在某些情况下不同”。 - Beetroot-Beetroot

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