.delegate()和.live()的区别

3

我在查看jQuery源码时发现了以下内容:

delegate: function( selector, types, data, fn ) {
    return this.live( types, data, fn, selector );
},

.delegate()函数与.live()函数基本相同,唯一的区别在于参数的顺序!为什么jQuery团队会这样做呢?


2
你看过文档了吗? - SLaks
请参见https://dev59.com/qG455IYBdhLWcg3wCPfh。 - Garett
3个回答

2

人们通常在使用live时省略了selector参数,我敢打赌大多数人甚至都不知道这个参数的存在。

delegate()让您轻松访问selector参数,它允许您将事件监听器“范围”限定在整个dom的子集中,这可能会导致更好的性能。

在传递内联匿名函数后提供其他参数很麻烦。由于选择器参数非常有用,因此jquery创建了一个更方便的形式是有意义的。

请参见: http://www.alfajango.com/blog/the-difference-between-jquerys-bind-live-and-delegate/


你说:“我打赌大多数人甚至都不知道选择器参数的存在。” 当官方文档 http://api.jquery.com/live/ 显示以下 .live() 语法时,某人应该如何知道“selector”参数呢?:A).live(events, handler) B).live(events [, data], handler) C).live(events)。选择器参数在官方文档的语法中并没有出现。 - Jaime Montoya

1
它们完全相同,除了以下几点:
  1. .delegate() 允许您缩小对某个元素的事件处理,而 .live() 必须在整个页面上处理事件,因为 `live` 在文档级别附加事件处理程序。
  2. .live() 利用从元素到文档的事件冒泡,而 delegate 停止在应用了 delegate 的元素上。
  3. live 相比,使用 delegate 可以非常好地控制事件处理。

我认为live的第四个参数是上下文。因此,您实际上可以将事件附加到比文档级别更具体的位置。 - Randomblue
@Randomblue,我不明白为什么在http://api.jquery.com/live/中看到的语法最多只允许三个参数,这也是从1.4版本开始添加的:.live( events [, data ], handler )。所以我不理解为什么会允许“第四个参数”的存在。 - Jaime Montoya

0

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