我在查看jQuery源码时发现了以下内容:
delegate: function( selector, types, data, fn ) {
return this.live( types, data, fn, selector );
},
.delegate()
函数与.live()
函数基本相同,唯一的区别在于参数的顺序!为什么jQuery团队会这样做呢?
人们通常在使用live
时省略了selector
参数,我敢打赌大多数人甚至都不知道这个参数的存在。
delegate()
让您轻松访问selector
参数,它允许您将事件监听器“范围”限定在整个dom的子集中,这可能会导致更好的性能。
在传递内联匿名函数后提供其他参数很麻烦。由于选择器参数非常有用,因此jquery创建了一个更方便的形式是有意义的。
请参见: http://www.alfajango.com/blog/the-difference-between-jquerys-bind-live-and-delegate/
.delegate()
允许您缩小对某个元素的事件处理,而 .live()
必须在整个页面上处理事件,因为 `live` 在文档级别附加事件处理程序。.live()
利用从元素到文档的事件冒泡,而 delegate
停止在应用了 delegate
的元素上。live
相比,使用 delegate
可以非常好地控制事件处理。jQuery团队在v1.7中宣布了一种新的绑定事件方法,称为on。该方法结合了下面描述的live、bind和delegate的功能,允许您根据传递的参数指定绑定方法,而不是使用不同的函数名称。