开发者社区> 问答> 正文

jquery on()方法的实现原理和优势?

blind()不能给创建的元素加事件,live()是通过事件委托加在document上所以不好,消耗性能,delegate()是通过事件委托加在给祖先元素上,on()方法的原理是什么,有什么优势?

展开
收起
小旋风柴进 2016-03-24 13:00:39 2245 0
1 条回答
写回答
取消 提交回答
  • 首先建议题主去看下jq的源码。

    live是新版jq废弃的功能,相当于delegate的document版。

    bind和delegate...给你看一段jq的源码你就很清楚了(为简洁省略了部分代码):

    jQuery.fn.extend({
        bind: function( types, data, fn ) {
            return this.on( types, null, data, fn );
        },
        delegate: function( selector, types, data, fn ) {
            return this.on( types, selector, data, fn );
        },
    });

    on是bind和delegate的底层实现,后两者是为了在特定场合简化代码或使代码可读性更强的快捷方式,或者说仅仅是为了保留历史兼容性而存在的东西。

    而on的基本功能则最终通过jQuery.event.add来实现:

    return this.each( function() {
        jQuery.event.add( this, types, fn, data, selector );
    });

    还是建议题主读一下jq源码,不必通读,直接搜索你关注的关键字即可。这里不就jQuery.event.add做更多展开了。

    实际上在常规用途上,你可以认为on和delegate的区别仅仅在于传参数方式不同而已,而bind则是一个进一步删除了冒泡绑定能力的版本。

    2019-07-17 19:12:37
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
基于VUE的单页面性能优化实践 立即下载
编程语言如何演化—— 以 JS 的 private 为例 立即下载
编程语言如何演化-以JS的private为例 立即下载