海欣海夜 2013-06-04
Joomla中是使用Mootools的,而现在大量的JS则是基于jQuery的,结果就导致了,在Joomla的二次开发中,经常需要处理两者争抢$的问题。
对于jQuery来说我们可以使用
var jq=jQuery.noConflict();
这段代码将jQuery中的$全部转换为jq,但是这种方法使原有代码中需要修改的地方太多。
并且很多JS使用该方法后会出现一些问题,导致无法正常运行。
这个问题实质上是JS的命名空间问题,在所有基于jQuery的js中,我们在代码开头加上
(function($){
在代码结尾加上
})(jQuery);
这样之后你不需要修改任何原有的代码,能够保证该JS能够正常运行。
同时Mootools不会受到干扰,因为现在原有的代码已经被限定在这个匿名函数中了。
(function($){})(jQuery);
这个写法主要的作用是保证jQuery不与其他类库或变量有冲突。
首先是要保证jQuery这个变量名与外部没有冲突(jQuery内部$与jQuery是同一个东西,有两个名字的原因就是怕$与其他变量名有冲突,jQuery与其他变量冲突的几率非常小)并传入匿名对象,匿名对象给参数起名叫做$(其实和jQuery内部是一样的)。
最后你就可以自由的在(function($){})(jQuery);里写你的JS而不需要考虑与外界变量是否存在冲突。