转载http://www.cnblogs.com/RascallySnake/archive/2010/05/07/1729417.html
在Jquery中,$是JQuery的别名,所有使用$的地方也都可以使用JQuery来替换,如$('#msg')等同于JQuery('#msg')的写法。然而,当我们引入多个js库后,在另外一个js库中也定义了$符号的话,那么我们在使用$符号时就发生了冲突。下面以引入两个库文件jquery.js和prototype.js为例来进行说明。
第一种情况:jquery.js在prototype.js之后进行引入,如:
<script src="prototype.js" type="text/javascript"/> <script src="jquery.js" type="text/javascript"/>
在这种情况下,我们在自己的js代码中如下写的话:
$('#msg').hide();
$永远代表的是jquery中定义的$符号,也可以写成JQuery('#msg').hide();如果想要使用prototype.js中定义的$,我们在后面再介绍。
第二种情况:jquery.js在prototype.js之前进行引入,如:
<script src="jquery.js" type="text/javascript"/> <script src="prototype.js" type="text/javascript"/>
在这种情况下,我们在自己的js代码中如下写的话:
$('#msg').hide();
$此时代表的prototype.js中定义的$符号,如果我们想要调用jquery.js中的工厂选择函数功能的话,只能用全称写法JQuery('#msg').hide().
下面先介绍在第一种引入js库文件顺序的情况下,如何正确的使用不同的js库中定义的$符号。
一.使用JQuery.noConflict()
该方法的作用就是让Jquery放弃对$的所有权,将$的控制权交还给prototype.js,因为jquery.js是后引入的,所以最后拥有$控制权的是jquery。它的返回值是JQuery。当在代码中调用了该 方法以后,我们就不可以使用$来调用jquery的方法了,此时$就代表在prototype.js库中定义的$了。如下:
JQuery.noConflict();//此处不可以再写成$('#msg').hide(),此时的$代表prototype.js中定义的$符号。 JQuey('#msg').hide();
自此以后$就代表prototype.js中定义的$,jquery.js中的$无法再使用,只能使用jquery.js中$的全称JQuery了。
二.自定义JQuery的别名
如果觉得第一种方法中使用了JQuery.noConflict()方法以后,只能使用JQuery全称比较麻烦的话,我们还可以为JQuery重定义别名。如下:
var $j=JQuery.noConflict(); $j('#msg').hide();//此处$j就代表JQuery
自此以后$就代表prototype.js中定义的$,jquey.js中的$无法再使用,只能使用$j来作为jquey.js中JQuery的别名了。
三.使用语句块,在语句块中仍然使用jquery.js中定义的$,如下:
JQuery.noConflict(); JQuery(document).ready(function($){ $('#msg').hide();//此时在整个ready事件的方法中使用的$都是jquery.js中定义的$. });
或者使用如下语句块:
(function($){ ..... $('#msg').hide();//此时在这个语句块中使用的都是jquery.js中定义的$. })(JQuery)
如果在第二种引入js库文件顺序的情况下,如何使用jquery.js中的$,我们还是可以使用上面介绍的语句块的方法,如:
代码
<script src="jquery.js" type="text/javascript"/> <script src="prototype.js" type="text/javascript"/> <script type="text/javascript"> (function($){ ..... $('#msg').hide();//此时在这个语句块中使用的都是jquery.js中定义的$. })(JQuery) </script>
这种使用语句块的方法非常有用,在我们自己写jquery插件时,应该都使用这种写法,因为我们不知道具体工作过程中是如何顺序引入各种js库的,而这种语句块的写法却能屏蔽冲突。
分享到:
相关推荐
于是找资料,原来是jquery命名冲突了。因为许多JavaScript 库使用$作为函数或变量名,jquery也一样。其实$只是jquery的一个别名而已,假如我们需要使用jquery 之外的另一js库,我们可以通过调用 $.noConflict() 向该...
总的来说,解决jQuery和其他框架的`$`命名冲突主要有三个步骤:识别冲突、隔离作用域(通过`noConflict()`或闭包)以及使用`jQuery`代替`$`。根据你的项目需求和代码结构,选择最适合的方式来避免冲突,确保各个库和...
然而,当我们引入多个js库后,在另外一个js库中也定义了$符号的话,那么我们在使用$符号时就发生了冲突。下面以引入两个库文件jquery.js和prototype.js为例来进行说明。 第一种情况:jquery.js在prototype.js之后...
但随着引入多个库,就可能出现$符号的命名冲突问题,因为$是jQuery的简写,也是其他一些JavaScript库中可能使用的别名。本文将详细介绍解决这一冲突的多种方法。 首先,我们要明白$是jQuery的一个别名。在jQuery中...
但当页面中引入了其他JavaScript库,比如prototype.js,而这个库同样使用$作为其函数或对象的简写,就会产生命名冲突。$符号同时代表了两个库中的内容,导致程序运行时不确定调用哪一个库,这将影响代码执行,特别是...
然而,在同一个项目中同时使用jQuery与DWR时,可能会遇到变量命名冲突的问题,特别是当两者都使用了`$`符号作为全局函数或对象时。 #### 问题分析 在上述代码片段中,可以看到一个典型的jQuery与DWR冲突的解决方案...
为了解决这一问题,本文将介绍五种解决jQuery命名冲突的方案。 首先,需要了解$符号在jQuery中只是一个快捷方式,即jQuery对象的别名。如果在使用其他JavaScript库时需要使用$标识符,可以调用jQuery的noConflict...
然而,由于它们都使用了同一个函数名`$`作为主要的API入口,这就会导致在同一个页面上同时使用时出现命名冲突,从而影响代码的正常执行。这个问题在描述中已经明确指出,当同时导入jQuery和ExtJS时,由于$符号的冲突...
此外,还可以考虑使用命名空间来避免冲突,例如,为每个库定义一个不同的变量,如`jQuery110`和`jQuery50`,但这种方法不如`$.noConflict()`优雅。 总的来说,处理`$`符号冲突的关键在于理解和巧妙地使用`$....
新的`transport.js`应该已经解决了与jQuery的冲突问题,采用了更友好的命名空间或者避免了与jQuery相同的方法名。替换后,ECSHOP将能更好地与jQuery库协同工作,避免冲突,同时保持原有的AJAX功能。 在实际操作中,...
它虽然解决了变量命名冲突的问题,但在整个项目中却需要使用更多的字符来代替$进行调用,这在一定程度上降低了jQuery编写代码的便捷性。 另一个解决冲突的思路是避免引入冲突。在准备引入jQuery之前,可以先检查...
这主要是因为Ecshop默认使用了一套自定义的JavaScript函数库(如eCS),而这些函数库与jQuery存在命名空间上的重叠或函数名相同的情况。当两者同时存在于同一个页面时,就可能发生冲突,导致某些功能失效。 #### ...
6. **使用命名空间**:如果两个库都有提供设置命名空间的功能,可以考虑使用它们,这样每个库都有自己的一组符号,减少冲突的可能性。 通过上述方法之一或结合使用,可以有效地解决jQuery和DWR.utls之间的冲突,...
然而,由于jQuery的普及,很多开发者会同时使用其他库,如`json.js`,这可能导致命名冲突。 冲突的常见原因: 1. **全局变量冲突**:两个库可能都定义了同名的全局变量,例如`$`或`jQuery`。在jQuery中,`$`是主要...
本文将深入探讨“jQuery自定义插件命名空间问题”,这涉及到如何优雅地组织和管理自定义的jQuery扩展,以避免冲突并保持代码的可维护性。 首先,了解jQuery插件的基本结构至关重要。一个简单的jQuery插件通常会定义...
总之,模拟jQuery命名空间是JavaScript开发中的重要技巧,它可以避免命名冲突,提高代码的模块化程度,同时也有助于保持代码的整洁。通过正确使用命名空间,我们可以更好地组织和管理项目,尤其是在使用多个库和插件...