关闭

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

1344人阅读 评论(0) 收藏 举报

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

因为在其他的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类库。


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:52219次
    • 积分:938
    • 等级:
    • 排名:千里之外
    • 原创:44篇
    • 转载:10篇
    • 译文:0篇
    • 评论:4条
    最新评论