jQuery和Prototype的兼容性和冲突的五种解决方法

第一种情况:先加载Prototype,再加载jQuery
方法一:jQuery 库和它的所有插件都是在jQuery名字空间内的,包括全局变量也是保存在jQuery 名字空间内的。

使用jQuery.noConflict();主要作用是在任何时候,只要在jQuery加载后就可以调用,将$符号的使用权返回给其它的js库,jQuery在创建它自己的名字空间时就将其它库的$保存在自己的一个变量当中。

[html] view plain copy

print?

  1. <html>
  2. <head>
  3. <script src="prototype.js"></script>
  4. <script src="jquery.js"></script>
  5. <script type="text/javascript" >
  6. //各个js库之间的主要冲突在于$的冲突,这个方法是用来处理这个问题的
  7. jQuery.noConflict();
  8. //原本使用jQuery代码部分的$ 用jQuery替代
  9. jQuery(document).ready(function (){
  10. jQuery("div").hide();
  11. });
  12. // Use Prototype with $(...), etc.
  13. $(‘proto‘).hide();
  14. </script>
  15. </head>
  16. <body></body>
  17. </html>

方法二:如果你仍然想使用类似于$这样比较简短的字符,你可以将jQuery.noConflict()的返回值赋值给某个变量。这个变量就是jQuery的新缩写了,当然你可以使用$以外的任意字符串,比如:

[html] view plain copy

print?

  1. <html>
  2. <head>
  3. <script src="prototype.js"></script>
  4. <script src="jquery.js"></script>
  5. <script type="text/javascript" >
  6. //$j就相当于jQuery,名称你可以自主定义
  7. var  $j = jQuery.noConflict();
  8. // Use jQuery via $j(...)
  9. $j(document).ready(function (){
  10. $j("div").hide();
  11. });
  12. // Use Prototype with $(...), etc.
  13. $(‘proto‘).hide();
  14. </script>
  15. </head>
  16. <body></body>
  17. </html>

方法三:如果你还是想使用$,而不想使用别的字符,也是可以的。而且通常程序员都比较喜欢这样做,因为这样做写好的代码几乎都不用替换原来的$符号。那就是利用名字空间的概念就所有的jQuery代码封装在document的ready事件名字空间范围内,如:jQuery(document).ready(这里填入jQuery代码)

[html] view plain copy

print?

  1. <html>
  2. <head>
  3. <script src="prototype.js"></script>
  4. <script src="jquery.js"></script>
  5. <script type="text/javascript" >
  6. jQuery.noConflict();
  7. // Put all your code in your document ready area
  8. jQuery(document).ready(function ($){
  9. // 这样你可以在这个范围内随意使用$而不用担心冲突
  10. $("div" ).hide();
  11. });
  12. // Use Prototype with $(...), etc.
  13. $(‘proto‘ ).hide();
  14. </script>
  15. </head>
  16. <body></body>
  17. </html>

第二种情况:先加载jQuery,再加载Prototype

按照这样的顺序加载,就不存在其它js库的$符号被jQuery占用的问题。所以对其它的js库的代码可以不作任何修改,照常使用$,而对 jQuery可以使用jQuery来替代$.如:

[html] view plain copy

print?

  1. <html>
  2. <head>
  3. <script src="jquery.js"></script>
  4. <script src="prototype.js"></script>
  5. <script type="text/javascript" >
  6. // 使用 jQuery 用 jQuery(...)
  7. jQuery(document).ready(function (){
  8. jQuery("div" ).hide();
  9. });
  10. // 使用 Prototype 时,用 $(...),
  11. $(‘someid‘ ).hide();
  12. </script>
  13. </head>
  14. <body></body>
  15. </html>

或者你不想写jQuery这么长的字符,你可以通过另外一种方法:

[html] view plain copy

print?

    1. var  $j = jQuery;
时间: 2024-10-22 12:48:30

jQuery和Prototype的兼容性和冲突的五种解决方法的相关文章

jQuery和Prototype的兼容性和冲突的多种解决方法

有两种情况: 1.先加载Prototype,再加载jQuery. 2.先加载jQuery,再加载Prototype. 针对情况1:先加载Prototype,再加载jQuery.方法一:jQuery 库和它的所有插件都是在jQuery名字空间内的,包括全局变量也是保存在jQuery 名字空间内的.使用jQuery.noConflict();主要作用是在任何时候,只要在jQuery加载后就可以调用,将$符号的使用权返回给其它的js库,jQuery在创建它自己的名字空间时就将其它库的$保存在自己的一个

Electron与jQuery中$符号冲突的三种解决方法

在Electron工程中引用jQuery时,经常会出现以下错误: Uncaught ReferenceError: $ is not defined 解决的具体方法如下: ①.在测试的过程中(测试过1.10.1,以及当前最新的3.2.1版本都不行),发现只要使用2.03版本的jQuery或者2.2.0版本的jQuery,就不会出现$未定义的情况. ②.使用jQuery原有的关键字jQuery()来替代$(),或者自定义关键字. <script type="text/javascript&q

接口冲突的一种解决方法

问题描述:在一个大的项目中往往会包括很多模块,会有不同的部门或公司来负责实现某个模块,也有可能有第三方或客户的参与.假如他们都用到了某个开源软件,底层模块根据自身的需求对这个开源软件进行了修改或裁减.上层也用到了此开源软件,根据它自己的需求不需要做改动.如果在一个项目中,底层和上层分别同时引入两次此开源软件,就会发生接口冲突.并且底层想对上层隐藏对此开源软件的使用,此时可以通过对接口重命名来解决冲突. 下面举一个简单实例来说明: 1.   首先模拟一个简单的开源库integerArithmeti

【jquery】ajax 请求成功后新开窗口被拦截解决方法

问题: 前面开发项目时碰到一个问题,ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是很可惜被浏览器给拦截了,怎么解决这个问题呢? 分析: 浏览器之所以拦截新开窗口是因为该操作并不是用户主动触发的,所以它认为这是不安全的就拦截了(不过如果是 _self 的话就不会有这个限制),即使 ajax 回调函数中模拟执行 click 或者 submit 等用户行为(trigger('click')),浏览器也会认为不是由用户主动触发的,因此不能被安全执行,所

解决jquery中动态新增的元素节点无法触发事件的问题有两种解决方法

解决jquery中动态新增的元素节点无法触发事件的问题有两种解决方法,如下: 为了达到更好的演示效果,假设在某个页面的body下有以下结构的代码: ? 1 2 3 4 5 6 7 8 9 10 11 <p id="pLabel">新加一条</p> <ul id="ulLabel">  <li class="liLabel">aaa1</li>  <li class="li

jquery.ajax的url中传递中文乱码问题的解决方法

jquery.ajax的url中传递中文乱码问题的解决方法 JQuery JQuery默认的contentType:application/x-www-form-urlencoded 这才是JQuery正在乱码的原因,在未指定字符集的时候,是使用ISO-8859-1 ISO8859-1,通常叫做Latin-1.Latin-1包括了书写所有西方欧洲语言不可缺少的附加字符. JQuery的Ajax根本没有考虑到国际化的问题,使用了欧洲的字符集,所以才引起了传递中文出现乱码的问题. 而我们的UTF-8

使用jquery插件报错:TypeError:$.browser is undefined的解决方法

关于$.browser browser就是用来获取浏览器基本信息的. jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support . 在更新的 2.0 版本中,将不再支持 IE 6/7/8. 以后,如果用户需要支持 IE 6/7/8,只能使用 jQuery 1.9. 解决方法 加入以下js即可 (function(jQuery){ if(jQuery.browser) return; jQuery.browser =

jquery mobile使用过程中遇到的一些问题及解决方法

最近在项目在综合考虑了可能维护性和应用本身的复杂性,采用了HTML5 + JQuery Mobile的文案. 记录一下遇到的两个问题. 1)为了在手机上运行的更快,canvas中底图决定调用 putImageData 来复制,但在android 2.3系统上,canvas 的 putImageData 有很严重的锯齿,canvas.translate(0.5, 0.5)也是没有效果.如下图,前面是正常画出的底图,后面是 putImageData 后的底图. 解决办法, if (android 2

jquery dialog open后,服务器端控件失效的快速解决方法

jquery dialog为我们提供了非常漂亮实用的对话框,比单调的alert.confirm.prompt好用很多. 在使用jquery与.net共同开发时,直接调用jquery dialog的open后,服务器端控件全部失效了,不能执行相应的后台代码.只是源于jquery默认把dialog添加到body中,而不是原来所在的服务器端的form中了 解决方法: 1.可以调用dialog的open前,$("#dialog").parent().appendTo("form:fi