有没有选择器参数和jquery委托的jquery有什么区别?

我正在使用jquery 1.10。 我想知道这三个function之间的区别。

哪个function更好,为什么?

委托function的目的是什么?

$(".dropdown-menu").on("click", ".show_opt_menu", function() { alert("hello"); }); $(".dropdown-menu .show_opt_menu").on("click", function() { alert("hello"); }); $(".dropdown-menu").delegate(".show_opt_menu", "click", function() { alert("Delegate"); }); 

任何人都可以解释一下吗?

首先,第三个函数( .delegate )已被.on (jQuery 1.7以上)取代,所以我不会使用它。

第二种方法将运行复杂的选择器“.dropdown-menu .show_opt_menu”,这是(相对)昂贵的,因为它首先得到所有.show_opt_menu然后看看哪些父母是.dropdown-menu 。 然后它为每个元素绑定一个事件。 这是(相对)昂贵的,因为您运行慢查询,然后绑定可能的许多事件。

第一种方法是最好的,因为它只将一个事件绑定到.dropdown-menu然后每当click事件冒泡到它时,它会检查事件以查看原始目标是什么。 这是一个便宜得多的选择,因为只有一个事件受到限制,所以它的性能要高得多。


总结:#1是最好的,#2通常已经完成,但更糟糕的是,#3已经过时了。

你可能不会注意到任何性能上的差异,但无论如何都值得关注,因为这是一种很好的做法。 在某些时候,您可能需要关注自己的表现。

第一个是委托事件处理程序 。 在决定使用提供的选择器(即.show_opt_menu )过滤冒泡元素链之前,它会侦听冒泡到.dropdown-menu事件。 然后它将您的函数应用于导致事件的任何匹配元素。 这是首选方式(特别是如果您有动态内容)。

第二个是单个元素上的标准事件侦听器,并导致连接多个事件处理程序。 元素必须在运行此代码时存在(与事件发生时相反)。

最后一个与第一个相同,但不太可读,并且已被正式取代: http ://api.jquery.com/delegate/:“从jQuery 1.7开始,.delegate()已被.on取代()方法。但是,对于早期版本,它仍然是使用事件委托的最有效方法“

在前两个选项中,我个人的偏好是始终使用委托事件处理程序更高效。 但是,由于此示例适用于click事件,因此任何解决方案之间的速度差异可以忽略不计(除非您每秒可以点击50,000次)。 🙂

 $(".dropdown-menu").on("click", ".show_opt_menu", function() { alert("hello"); }); 

当目标元素为.show_opt_menu时,此函数将click事件附加到.dropdown-menu,这意味着当您动态添加另一个.show_opt_menu时不需要附加click函数。 父级负责点击操作。

 $(".dropdown-menu .show_opt_menu").on("click", function() { alert("hello"); }); 

此函数将click事件附加到.show_opt_menu,因此当您动态添加新的.show_opt_menu时,您需要将事件单独附加到该事件。

 $(".dropdown-menu").delegate(".show_opt_menu", "click", function() { alert("Delegate"); }); 

同样的目的

。代表()

根据一组特定的根元素,为现在或将来one or more events for all elements that match the selector附加处理程序。

.delegate()已被.on()方法取代