jQuery与mootools共存冲突怎么解决???
你是说命名冲突么?jQuery里有个API叫noConflict();就是为了解决命名冲突问题,使用如下。
var jq = jQuery.noConflict();
此处只能用jQuery而不能用$,因为$在此时已经冲突了,而在jQuery中jQuery对象和$是等价的,一般用其他库的情况下,jQuery命名不会冲突。
使用的时候,由于规定了jq=jQuery.noConflict(),所以可以直接将jq当作jQuery的$符号用。
例如:jq("#example").hide();
除此之外,还有几种其他的用法:
用法二:
jQuery.noConflict();
jQuery("#example").hide();
类似于上面的方法,只是此处并没有将jQuery简写,这样就是打的字会比上面一个多一点。(就是说这里不用var将某个对象设置成jQuery实例,所以每次都要用jQuery代替$简写符)
方法三
jQuery.noConflict();
(function($){
$(function(){
//此处用带有$的代码写;例如$("#example").hide();
})
})(jQuery)
这个原理是在noConflict的下面自行构造了一个参数为$的函数(由于参数不是全局的,所以和$不冲突),而传入的参数为jQuery(也就是jQuery的通用对象),然后此函数里包含了一个function $()空参数函数来运行语句,但是此函数的名称就是刚才传入的$,由于这函数是属于外部函数内部,所以不会冲突,而此时就相当于新构造出的函数$为jQuery的实例。
方法四
jQuery.noConflict()(function(){
//此处写代码,但是不能用$而应该用jQuery()
})
这个原理就是在jQuery.noConflict()返回的新实例中直接传入参数,noConflict返回的新实例相当于jQuery实例,在参数中用空参函数运行语句。
方法五
var dom={};
dom.query=jQuery.noConflict(true);
这个方法是完全将jQuery移到另外一个命名空间里。构造一个空的DOM数组,然后将jQuery.noConflict()返回的jQuery实例复制到dom.query并清空之前存在的所有元素,不过感觉此方法还不如用jQuery("#example"),因为它调用的语句是dom.query("#example")
有话要说