• jQuery多库共存问题解决方法


    一、问题概述:

    1、随着jQuery的流行,采用jQuery和$符为命名空间的js库越来越多,当然jQuery的$符也是参照的Prototype库的,所以当多个库同时以$符或者jQuery为命名空间时,那么此时,就会产生冲突。

    2、由于jQuery的更新速度过快,所以插件更不上,导致不同版本的jQuery对插件支持的不一样,而刚好我们此时需要用一个高版本的jQuery进行开发,我们用的z-tree则是低版本的jQuery,所以在这种场景下,则会产生$和jQuery命名空间冲突的问题

    3、这里jQuery解决多库共存的问题的绝决方案只用于单文件js类库框架,如果是多文件就不行了像EXT这种

    二、解决方法

    1、通过jQuery自带的noConflict函数将$或者jQuery映射回给之前使用过$和jQuery对象的js类库

    简介:jQuery.noConflict()的具体实现

    
    
    
        
        Title
    
    
    
    
    

    (1)通过jQuery.noConflict()交还$和jQuery对象的控制权,解决命名控件冲突的问题

    当jQuery文件第一个加载时,调用jQuery.noConflict()交换$的控制权

    
    
    
        
        Title
        
    
    
    
    
    
    

    当jQuery文件在其他js库加载完之后加载,且这些库已经使用了$对象

    
    
    
        
        Title
        
        
    
    
    
    
    
    

    (2)通过jQuery.noConflict()来给jQuery对象重新命名的方式解决冲突问题

    这实际上也是交换$对象给前面的js类库后,通过返回的jQuery对象自定义的给jQuery对象命名的方式,解决的方式其实和上面的是一样的,但是区别是我们可以定义一个个性化的名字(前提是不要和前面的对象冲突)

    
    
    
        
        Title
        
    
    
    
    
    

    (3)听过jQuery.noConflict()方法返还$对象的控制权,通过匿名执行函数(闭包)的方式重新恢复对$对象的使用,只不过,$对象只在闭包范围内有效

    
    
    
        
        Title
        
    
    
    
    
    

    (4)通过jQuery.noConflict()同时去除$对象和jQuery对象的控制权

    
    
    
        
        Title
        
    
    
    
    
    

    (5)下面是终极的解决方案,使用这个方案你可以把jQuery集成到你自己定义的js类库中区,同时,去除$和jQuery对象的控制,也就是说,$和jQuery不再适用,而把jQuery对象的所有的属性和方法,都转移到你的对象下面

    
    
    
        
        Title
        
    
    
    
    
    

    通过上面的输出发现:此时$和jQuery对象均无法使用,而自定义的zc.query怎可以使用jQuery对象所有的属性和方法

  • 相关阅读:
    即拼七人拼团系统开发模式,如何助力电商平台提升产品销量和复购率?
    比较Zoho Mail和ProtonMail:哪个更适合企业邮箱?
    某HR引全网公愤:大专都是猪吗?只值200,然后...
    国内工业控制系统
    图解MySQL中的JOIN类型
    Java Math.acos()方法具有什么功能呢?
    11 多线程与高并发 - JUC 阻塞队列(PriorityQueue、PriorityBlockingQueue、DelayQueue)源码解析
    二,几何相交-5,BO算法实现--(3)事件和操作
    c++day3
    为什么大家都开始做游戏化产品?
  • 原文地址:https://blog.csdn.net/m0_72345017/article/details/127766766