Joomla中jQuery和Mootools解决冲突

海欣海夜 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而不需要考虑与外界变量是否存在冲突。

相关推荐