自
$("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/