请选择 进入手机版 | 继续访问电脑版

10模板

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 885|回复: 2

jQuery多库共存处理

[复制链接]

1325

主题

1840

帖子

4781

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4781
发表于 2017-3-2 10:51:39 | 显示全部楼层 |阅读模式

多库共存换句话说可以叫无冲突处理。

总的来说会有2种情况会遇到:

   1、$太火热,jQuery采用$作为命名空间,不免会与别的库框架或者插件相冲突。

   2、jQuery版本更新太快,插件跟不上,导致不同版本对插件的支持度不一样。

出于以上的原因,jQuery给出了解决方案–– noConflict函数。

    引入jQuery运行这个noConflict函数将变量$的控制权让给第一个实现它的那个库,确保jQuery不会与其他库的$对象发生冲突。
在运行这个函数后,就只能使用jQuery变量访问jQuery对象。例如,在要用到$("aaron")的地方,就必须换成jQuery("aaron"),因为$的控制权已经让出去了。

使用DEMO:

jQuery.noConflict();
// 使用 jQuery
jQuery("aaron").show();
// 使用其他库的 $()
$("aaron").style.display = ‘block’;
   这个函数必须在你导入jQuery文件之后,并且在导入另一个导致冲突的库之前使用。当然也应当在其他冲突的库被使用之前,除非jQuery是最后一个导入的。

由于比较简单,我们直接上代码解说:

Var _jQuery = window.jQuery,
    _$ = window.$;

jQuery.noConflict = function( deep ) {
    if ( window.$ === jQuery ) {
        window.$ = _$;
    }
if ( deep && window.jQuery === jQuery ) {
        window.jQuery = _jQuery;
    }
    return jQuery;
};
    如果我们需要同时使用jQuery和其他JavaScript库,我们可以使用 $.noConflict()把$的控制权交给其他库。旧引用的$ 被保存在jQuery的初始化; noConflict() 简单的恢复它们。
    通过类似swap交换的概念,先把之前的存在的命名空间给缓存起来,通过对比当前的命名空间达到交换的目的,首先,我们先判断下当前的的$空间是不是被jQuery接管了,如果是则让出控制权给之前的_$引用的库,如果传入deep为true的话等于是把jQuery的控制权也让出去了。
    如果不通过noConflict处理的话其后果可想而知,香喷喷的$大家都“觊觎已久”。
  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <script src="http://img.mukewang.com/down/540812440001e40e00000000.js" type="text/javascript"></script>
  6. <title>多库共存</title>
  7. </head>
  8. <body>
  9.    
  10. <div id="aaron">测试noConflict效果</div>

  11. <script type="text/javascript">

  12.     $("#aaron").click(function() {

  13.         $.noConflict(); //让出控制权

  14.                 if (!$) {
  15.                         show("使用noConflict后,$不存在")
  16.                 }

  17.                 if (jQuery) {
  18.                         show("使用noConflict后,jQuery存在")
  19.                 }

  20.                 //通过闭包隔离出$
  21.                 ;(function($) {
  22.                         if ($) {
  23.                                 show("通过闭包隔离后,转为局部变量$存在")
  24.                         }
  25.                 })(jQuery);

  26.     })

  27.     function show(data) {
  28.             jQuery("body").append('<li>' + data + '</li>')
  29.     }

  30. </script>
  31. </body>
  32. </html>
复制代码


asdsadsa
回复

使用道具 举报

1325

主题

1840

帖子

4781

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4781
 楼主| 发表于 2017-4-3 14:49:57 来自手机 | 显示全部楼层
@晴天 看到没有
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|10模板  

GMT+8, 2018-7-20 05:21 , Processed in 0.285112 second(s), 24 queries .

快速回复 返回顶部 返回列表