jQuery学习笔记——jQuery和其他库冲突的解决办法
一般来说,$符号是最容易引发冲突的地方。jQuery使用$作为jQuery名称的别名,因此jQuery所展示的每个功能都用到$。但是其他库,如常见的Prototype也使用$名称。
所幸还好,jQuery提供了$.noConfict() 实用工具函数,用于放弃对$名称的控制,把$符号让给其他任何库。
因为$只是jQuery的别名,所有在应用$.noConfic() 之后jQuery的全部功能依然可用,只是要使用jQuery标示。
当然也可以通过自定义的方式给jQuery定义一个更短的、不会引起冲突的别名:
var $j=jQuery;
另一个经常采取的习惯用法是创建一个环境,在里面$名称的作用域被设定为引用jQuery对象。
(function($) { /* some functions */ })(jQuery);
函数说明:前面部分(function($){ }) 声明了一个函数,用圆括号括起来,由此构成一个表达式,这个匿名函数的引用作为表示式的值而被返回。函数需要一个名为$的参数。在函数体内,可以利用$标示符引用任何传递给这个函数的东西。因为参数声明优先于在全局作用域里的任何同名标示符,所以在这个函数外面为$定义的任何值在函数内被传入的参数所取代。
(jQuery)——传递jQuery对象所谓匿名函数的实参。
因此在匿名函数体内,jQuery对象被$名称所引用,而不管在匿名函数外面,是否$名称已经为Prototype或其他库所定义。即:使用这个技巧,在匿名函数体内,$的外部声明是不可用的。
上述习惯用法还有以下变形:
jQuery(function($){
alert("I'm ready!");
});
通过传递一个函数作为jQuery函数的参数,由此把这个函数声明为就绪处理程序。$标示符作为单个参数传递给就绪处理程序。因为jQuery总是把jQuery对象的引用作为唯一的第一个参数传递给就绪处理程序,所以这保证了在就绪处理程序内jQuery对象被$名称所引用,而不管在就绪处理函数体的外面,是否$名称已经被定义。
注:部分内容节选自《jQuery实战》一书