jquery - .delegate() 和 live() 有什么区别?

标签 jquery events delegates

$("table").delegate("td", "hover", function(){
    $(this).toggleClass("hover");
});

相当于下面使用.live()编写的代码:

$("table").each(function(){
    $("td", this).live("hover", function(){
        $(this).toggleClass("hover");
    });
});

根据jQuery API .

我敢打赌我错了,但这不就是写作吗

$("table td").live('hover', function() {});

那么,.delegate() 的用途是什么?

最佳答案

live() 的工作方式是,它在 DOM(文档)的顶层放置一个处理程序,用于检测您选择的事件何时冒泡到该级别(然后检查以查看如果它是由与您的选择器匹配的元素抛出的)。

delegate() 的工作方式相同,但处理程序放置在所选元素上(因此它只能检测该元素的后代抛出的事件)。

live() 的缺点是 1) 检测和检查冒泡到文档级别的所有事件所固有的性能问题,以及 2) 您根本无法停止传播这些事件(因为在它们到达文档级别之前您不会知道它们)。

delegate() 通过让您将处理程序限制为较小的元素集(与您的选择器及其后代匹配的元素)而不是整个页面来缓解这两个问题。

关于jquery - .delegate() 和 live() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3885212/

相关文章:

events - Visual C++ 中的简单回调

iphone - Coredata 更新后一致更新 UITableview

asp.net-mvc-2 - 如何在 Asp.net MVC2 中通过 Ajax 调用处理 UnauthorizedRequest

javascript - Django 和 JQuery - 查找和替换文本

javascript - 如何在jqm的 ListView 中拖放li?

c# - 私有(private)EventHandler和私有(private)事件EventHandler的区别?

ios - Swift:如何将通用协议(protocol)作为另一个协议(protocol)的参数传递

jQuery 动画 - 平滑大小过渡

java - CEP : source for real-time events or data feeds?

java - 如何确定哪个菜单项称为 ActionListener?