解决jQuery和其他库的冲突

本文摘自《锋利的jQuery》

在jQuery库中,几乎所有的插件都被限制在它的命名空间里。通常,全局(global)对象都被很好地存储在jQuery命名空间里,因此当把jQuery和其他JavaScript库(例如Prototype、MooTools或YUI)一起使用时,不会引起冲突。

注:默认情况下,jQuery用$作为自身的快捷方式。

1、jQuery库在其他库之后导入

在其他库和jQuery库都被加载完成后,可以在任何时候调用jQuery.noConflict()函数来将变量$的控制权移交给其他JavaScript库。示例如下:

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>Document</title>
 </head>
 <body>
  <p id="pp">test---prototype</p>
  <p>test---jQuery</p>
  <script src="prototype.js" type="text/javascript"></script>
  <script src="jquery-2.1.3.js" type="text/javascript"></script>
  <script>
 jQuery.noConflict();//将变量$的控制权移交给prototype.js
  jQuery(function()//使用jQuery
  {
	  jQuery("p").click(function(){
		  alert(jQuery(this).text());
	  });
  });
  $("pp").style.display=‘none‘;//使用prototype
 </script>
 </body>
</html>

然后,就可以在程序里将jQuery()函数作为jQuery对象的制作工厂。
另外,还有另一种选择。如果想确保jQuery不会与其他库冲突,但又想自定义一个快捷方式,可以进行如下操作:

var $j=jQuery.noConflict();//自定义一个快捷方式
  $j(function(){             //使用jQuery,利用自定义快捷方式--$j
	  $j("p").click(function(){
		  alert($j(this).text());
	  });
  });
  $(‘pp‘).style.display=‘none‘;//使用prototype

如果不想给jQuery自定义这些备用名称,还想使用$而不管其他库的$()方法,同时又不想与其他库相冲突,那么可以使用以下两种解决方法。

其一:

jQuery.noConflict();   //将变量$的控制权让渡给prototype.js
jQuery(function($){    //使用jQuery设定页面加载时执行的函数
	$(‘p‘).click(function(){//在函数内部继续使用$()方法
		alert($(this).text());
	});
});
$(‘pp‘).style.display=‘none‘;//使用prototype

其二:

jQuery.noConflict();//将变量$的控制权让渡给prototype.js
  (function($){       //定义匿名函数并设置形参为$
	$(‘p‘).click(function(){//匿名函数内部的$均为jQuery
		alert($(this).text());//继续使用$()方法
	});
  })(jQuery);    //执行匿名函数且传递实参jQuery
  $(‘pp‘).style.display=‘none‘;//使用prototype

这可以通过改变最少的代码来实现全面的兼容性。

2、jQuery库在其他库之前导入
如果jQuery库在其他库之前就导入了,那么可以直接使用“jQuery”来做一些jQuery的工作。同时,可以使用$()方法作为其他库的快捷方式。这里无需调用jQuery.noConflict()函数。示例如下:

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>Document</title>
 </head>
 <body>
  <p id="pp">test---prototype</p>
  <p>test---jQuery</p>
  <script src="jquery-2.1.3.js" type="text/javascript"></script>
  <script src="prototype.js" type="text/javascript"></script>
  <script>
  jQuery(function()
  {
	  jQuery("p").click(function(){
		  alert(jQuery(this).text());
	  });
  });
  $("pp").style.display=‘none‘;
  </script>
 </body>
</html>
时间: 2024-11-05 18:55:11

解决jQuery和其他库的冲突的相关文章

iOS解决两个静态库的冲突 duplicate symbol

http://blog.163.com/023_dns/blog/static/118727366201391544630380/ 场景: 解决TencentOpenAPI.framework与ZbarSDK中  _base64_encode 函数的冲突 后来在网络上搜寻,删除掉 Other Linker Flag 的 -all_load 就可以解决静态库冲突的问题, 但是这样做的话,会使一些外部的静态库,使用objc扩展函数(catagory)的方法失效.例如BaiduMapApi 如果是有些

jQuery与其他库的冲突解决

1.jQuery库在其他库之后导入 使用jQuery作为变量名 1 <script type="text/javascript" src="prototype.js"></script> 2 <script type="text/javascript" src="jquery.js"></script> 3 <script type="text/javascrip

jQuery与其它库冲突的解决方法(转)

原文出处:http://www.jb51.net/article/24014.htm 在jQuery库中,几乎所有的插件都被限制在它的命名空间里.全局的对象都很好地存储在jQuery命名空间里,因此当把jQuery和其它javascript类库一起使用时,不会引起冲突. (注意:默认情况下,jQuery用$作为自身的缩写而以) 如果jQuery类库和别的类库冲突的话,可以使用jQuerynoConflict()函数来将变量$的控制权移交出给其它的javaScipt库.看下面小片断代码 <scri

解决jQuery多个版本,与其他js库冲突方法

jQuery多个版本或和其他js库冲突主要是常用的$符号的问题,这个问题 jquery早早就有给我们预留处理方法了,下面一起来看看解决办法. 1.同一页面jQuery多个版本或冲突解决方法. <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>jQuery测试页</title> </head>

jQuery库(noConflict)冲突解决机制

许多的JS框架类库都选择使用$符号作为函数或变量名,而且在实际的项目开发中,使用模板语言的话有可能"$"符号即为该模板语言的关键字.例如Veclocity模板语言,$是关键字.与jQuery一起使用可能会存在冲突(页面中直接写jq代码,引入的js文件不存在该问题).吐槽下为啥这么多js库喜欢用$($ is money?). jQuery是使用$符号作为函数或变量名最为典型的一个.在jQuery中,$符号只是window.jQuery对象的一个引用,因此即使$被删除,jQuery依然能保

jquery和其他js库起冲突的解决方法

我以为jquery只会和其他js框架如(Dojo,Prototype,ExtJs)等发生冲突 今天用了一下My97DatePicker日历控件 当我同时引入jquery.js和/My97DatePicker/WdatePicker.js时,出现错误,日历控件不可用 应该是js库发生冲突了 做了如下改动: var $j=jQuery.noConflict(); 以后用jquery的时候不再用$而是$j 这样问题就解决了.. 再分享一下我老师大神的人工智能教程吧.零基础!通俗易懂!风趣幽默!还带黄段

(function($, window, document) {}) jQuery 调用解决与其他javascript库冲突的写法

将函数包在红色字体内部,可以解决$符号与其他插件的冲突. <script type="text/javascript"> (function($, window, document) { //$(document).ready(function(){ var param_cats = $("input[name='category[]']:checked").val(); if(param_cats == null || param_cats == ''

如何避免jQuery库和其他库的冲突

默认情形:jQuery用$作为自身的快捷方式 1. jQuery库在其他库之后导入 (1)方法:使用jQuery.noConflict()函数将变量$的控制权转移给其他库 (2)操作: (a)在js代码的开头加上jQuery.noConflict()函数 (b)jQuery的代码使用如下方式 1 jQuery(function(){ 2 jQuery("p").click(function(){ 3 alert("aa"); 4 }) 5 }) 此时的$权被移交给其

jQuery中noConflict()机制的冲突解决方法

许多的JS框架类库都选择使用$符号作为函数或变量名,而且在实际的项目开发中,使用模板语言的话有可能"$"符号即为该模板语言的关键字.例如Veclocity模板语言,$是关键字.与jQuery一起使用可能会存在冲突(页面中直接写jq代码,引入的js文件不存在该问题). jQuery是使用$符号作为函数或变量名最为典型的一个.在jQuery中,$符号只是window.jQuery对象的一个引用,因此即使$被删除,jQuery依然能保证整个类库的完整性. jQuery的设计充分考虑了多框架之