jQuery:我的“$”我做主

简介:

  前些天朋友让我帮他解决一个页面中jquery特效的兼容性问题,觉得这是一个很容易忽略也很重要的一点,特在此记录一下。

      朋友给的页面中用到了三个特效,其中两个特效可以显示,第三个没有效果。通过查看引用的js文件,我发现页面中不光引入了jquery.js,还引入了一个名为prototype.js的文件。 这个prototype.js之前未曾听说过,特意在百度上搜了一下,原来它也是一个js类库,功能和jquery差不多,而且很强大。

      通过一点点的排查,我发现那两个可以显示的特效引用的是jquery,而不显示的那个特效引用的是这个prototype.js。 稍一分析,终于找到了出错的关键:jquery中的$和prototype.js中的$冲突了,两个类库中都是通过$符号来调用,然而如果直接这样写的话就会不知道这个$是属于谁的,该调用哪个类库中的方法来实现特效的显示。

      既然找到了问题的根结所在,那这个问题也就好解决了。

方法一:在jquery中,有这样一段代码:

//  Expose jQuery to the global object

window.jQuery = window.$ = jQuery;

      也就是说,我们可以通过jQuery来代替jquery.js中的$符号进行调用,前提必须声明一下:

 jQuery = $; 

      那,新的问题又出现了。页面中有那么多地方用到了$,我不仅要区分到底哪些$是属于jquery的,还要将这些$替换成jQuery这个单词,更严重的是,如果该页面中要增加新的jquery特效,我还要时刻的提醒自己,调用$的时候要用jQuery来代替,稍一疏忽,不仅出不来想要的效果,而且修改起来也是一个大工作量的任务。看来,这种方法是行不通的。

      难道就没有一个一劳永逸的方法可以将这个$的"归属权"给明确的区分出来吗?办法当然是有的!

 方法二:使用jquery语句块来实现:

首先,来看一下jquery语句块的格式:

( function ($){ 
  ..... 
  $('#msg').show(); // 此时在这个语句块中使用的都是jquery.js中定义的$. 

})(JQuery)

      这样,我们在调用jquery中的$实现特效显示时,只要把这段代码写在这个语句块中,$符号该怎么调用还怎么调用。而prototype.js中的$写在语句块外,$符号也是该怎么调用怎么调用,两者根本不会产生什么影响了。

 希望这个方法也能给遇到相同问题的其他人带来帮助!

附:

参考: 

Jquery的$命名冲突:

 

prototype.js的相关知识链接:

 prototype.js 1.4版开发者手册(强烈推荐)  

 js中prototype详解

 本文转自 酷小孩 博客园博客,原文链接: http://www.cnblogs.com/babycool/archive/2012/08/18/2645970.html ,如需转载请自行联系原作者


相关文章
|
JavaScript
jQuery节点操作、弹幕案例
jQuery节点操作、弹幕案例
jQuery节点操作、弹幕案例
ADI
|
XML JSON 前端开发
[记录] Jquery教程
[记录] Jquery教程
ADI
114 0
|
JavaScript
jQuery选择集转移
选择集转移就是以选择的标签为参照,然后获取转移后的标签
91 0
|
JavaScript
《锋利的jquery》认识jquery总结
《锋利的jquery》认识jquery总结
85 0
|
JavaScript 前端开发 API
jQuery系列 第七章 jQuery框架DOM操作
第七章 jQuery框架的选择器 jQuery框架继承和优化了JavaScript访问DOM对象的特性,我们使用jQuery框架提供的api可以更加方便的操作DOM对象。 7.1 创建DOM节点 使用JavaScript原生方式创建DOM节点并添加到页面中的代码示例: 1 //01 创建DOM节点 2 var oDiv = document.
1112 0
|
Web App开发 JavaScript 前端开发
|
Web App开发 前端开发 JavaScript
03-老马jQuery教程-DOM操作(上)
jQuery DOM操作 在没有jQuery之前,DOM的操作相对来说有点麻烦,尤其是DOM节点的搜索。目前我们已经学习了jQuery的选择器,接下带大家一块学习jQuery的DOM操作,jQuery对DOM操作的封装让我们前端开发工作非常简便、简洁、兼容性好。
1140 0