解决多类库冲突——“$”变量冲突问题

原创 2012年03月23日 09:44:02

解决多类库冲突——“$”变量冲突问题

因为在其他的javascript类库中,也会使用“$”变量作为类库对象的引用,比如Prototype。当一个页面需要同时使用两个脚本库时,就会产生冲突,导致“$”变量的引用不明确。

jQuery提供了jQuery.noConfilct()及其重载用来解决此问题,jQuery.noConflict函数有两个重载:

jQuery提供了jQuery.noConflict(extreme ),虽然官方类库提供了两个重载方法,但是javascript并支持重载,内部实现仅仅是一个函数,根据是否传入了参数而执行不同的处理。

jQuery.noConflict()的作用是将变量$的控制全转交给第一个实现他的那个库。如果extreme参数为“true”即表示同时将“jQuery”变量的控制权也转交出去。也许有的脚本中不仅仅占用了“$”变量而且连“jQuery”变量也占用了,比如:

jQuery.noConflict(true);

下面是一个同时使用jQuery类库和Prototype类库的例子:

<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<htmlxmlns="http://www.w3.org/1999/xhtml">

<head>

<metahttp-equiv="Content-Type" content="text/html; charset=utf-8"/>

         <title>jQueryStorm – 常见错误</title>

         <scriptsrc=”../jquery-1.7.0.js”  type=”text/javascript”></script>

</head>

<body>

         <!—页面本部分 -->

         <divid=”divMsg” style=”border:solid 1px #000000”;padding=20px;”>

                   [输出控制台 ]<br>

         </div>

         <!—尾部脚本块 –->

         <scripttype=”text/javascript”>

                   jQuery.noConfilct();

                   $(“divMag”).innerHTML=”writtenby Prototype”;           //调用Prototype

         </script>

</body>

</html>

在上面的例子中先引用了prototype的类库,在引用了jQuery类库。因为javascript文件是顺序执行的,所以如果不使用jQuery.noConflict(),”$”变量将被jQuery使用。使用“$”调用prototype类库时将失效。使用noConflict函数后,“$”变量重新被Prototy类库使用。

jQuery.noConflict()函数返回原“jQuery”变量本身,应用此原理可以改变“jQuery”变量的引用名称:

         $=jQuery.noConflict();

         $(“divMsg”).innerHTML=”writtenby Prototype”; //调用Prototype

         $$(“#divMsg”).html($$(“#divMsg”).html()+”<br/>”+”writtenby jquery”);  //调用jQuery

上例子中将“jQuery”变量的引用赋给了“$$”变量,则可以使用”$”调用Prototype类库,使用“$$”调用jQuery类库。


相关文章推荐

解决库冲突问题

  • 2012年12月06日 15:38
  • 16KB
  • 下载

GCC的符号可见性——解决多个库同名符号冲突问题

问题 最近项目遇到一些问题,场景如下 主程序依赖了两个库libA的funcA函数和libB的funcB函数。示意的代码(main.cpp)如下: #include int fun...

ScrollView嵌套ListView——解决滑动冲突问题

//布局中的代码实现 一个简单的布局设置 演义滑动冲突
  • Mannver
  • Mannver
  • 2016年04月12日 20:49
  • 10403

问题解决——使用CriticalSection后 0xXXXXXXXX处最可能的异常: 0xC0000005: 写入位置 0x00000014 时发生访问冲突

想了半天,觉得还得从提示入手:最可能的异常: 0xC0000005: 写入位置 0x00000014 时发生访问冲突。 这位置?这个位置就是……...
  • wlsgzl
  • wlsgzl
  • 2014年12月18日 13:33
  • 9937

数据结构——采用分离链接解决冲突问题的散列表

散列表是一种通过元素(关键值)的散列码直接进行数据存取操作的数据结构。散列码是通过散列函数获取的,一般好的散列函数很重要,可以把元素均匀的散列到数据表中,将有利于数据的存取操作。但是物理空间毕竟是有限...

ScrollView+ListView冲突问题完美解决

  • 2015年11月18日 16:16
  • 1010KB
  • 下载

《正在努力成长为小牛的路上》--setInterval与setTimeout定时器变量冲突问题

通过标签加载的js代码最后是会自己拼接起来的,所以没有写进闭包的变量都是全局变量,很容易发生变量冲突。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解决多类库冲突——“$”变量冲突问题
举报原因:
原因补充:

(最多只允许输入30个字)