就性能而言,它基本上是相同的。jQuery调用的本地javascript方法是addEventListener
,它只接受一个事件作为参数。无论jQuery是否喜欢,添加多个事件侦听器都需要为每个侦听器调用addEventListener
。请自行查看:
- 创建一个名为
index.html
的新文件,如下所示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>title</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.js"></script>
</head>
<body>
<div id="cart">cart</div>
<script>
$( "#cart" ).on( "mouseenter mouseleave", function( event ) {
$( this ).toggleClass( "active" );
});
</script>
</body>
</html>
- 使用浏览器打开它。打开浏览器开发者工具(以下示例是Chrome),找到
jquery.js
文件并在第5039行设置断点:
![enter image description here](https://istack.dev59.com/BI7K9.webp)
- 重新加载页面并观察调试器。
它会恰好两次进入断点,一次是您要监听的每个事件。如果您像这样更改脚本标记:
$( "#cart" ).on( "mouseenter mouseleave click focus blur", function( event ) {
$( this ).toggleClass( "active" );
});
现在,它将按预期5次通过断点。
基本上,这段jQuery代码:
$('#cart').on("mouseenter mouseleave", myCallback);
等同于
$('#cart').on("mouseenter", myCallback);
$('#cart').on("mouseleave", myCallback);
等同于:
document.getElementById('cart').addEventListener("mouseenter", myCallback);
document.getElementById('cart').addEventListener("mouseleave", myCallback);
结论:使用你认为美观的任何东西。
.on('click hover'
,然后自豪地结束它。 (根本没有必要谈论性能。) - Roko C. Buljan