jquery兼容实验
使用jquery时候,曾经遇到两个问题:
1.一个页面里,使用了很多基于jquery的前端ui库,但是各个库之间对jquery的依赖的版本不一样,有的依赖jquery1.4,jquery2.0用不了;有的依赖jquery2.0,jquery1.4用不了。这下就麻烦了,如果先在项目里引入jquery1.4,然后初始化我们的控件,再引入jquery2.0,之前用jquery1.4初始化的控件就全用不了了,能不能在一个页面里同时引用两个jquery,不同的控件用不同的jquery呢?
2.一个页面里,想同时使用了两个ui库,比如easyui和jqueryui,但是两个ui库冲突了,主要因为他们控件定义的名字是一样的。比如一个创建了jQuery.fn.a,另一个ui库也创建了一个jQuery.fn.a,后一个就会把前一个覆盖掉,那有没有可以解决的方法呢?
其实两个问题都是可以解决的。首先我们开发jq插件都时候,都喜欢使用“(function($){})(jQuery);”这样的一段代码,将我们真正的代码包起来,这样的做法主要有两个目的:
1.是为因为js的作用域是函数级的,只有使用函数,才能使得一些局部变量不会“污染”全局作用域或者上层作用域。
2.就是为了更好地兼容jq不同的版本,因为通过参数传递,window上的jQuery变成了别名$,而这个$与window上的$并不是一个东西,即便以后window上的$发送了变化,这个域里的$还是最初传进来的对象。
那么我们可以从这里看出,只要在引入第二个jq前,将第一个jq起个别名,就可以继续使用之前引入的jq了。
如:var $1_4 = $;
<script src="//cdn.bootcss.com/jquery/1.4.0/jquery.js"></script>
<!-- 基于1.4的插件初始化 -->
<script>
var $1_4 = $
</script>
<script src="//cdn.bootcss.com/jquery/2.0.0/jquery.js"></script>
<!-- 基于2.0的插件初始化 -->
这样使用1.4的插件使用$1_4,使用2.0的插件时候使用$,当然在引入2.0后,就没办法再引入基于1.4jq的插件了。
如果自己使用$1_4不是很习惯,我们可以类比$插件的定义来一个“(function($){})(jQuery);”
(function($){
//使用1.4版本的插件,这里的$就是$1_4
$("#id")...
})($1_4);
当前,如果还是想让$和jQuery的版本变回1.4,有没有解决办法呢?
当然有了,最蠢的办法就是继续类似命名$1_4这样的方式换名字罢了,但是有没有更优雅的方式呢?
有,这才说到noConflict方法,事实上jquery在覆盖window的原有$和jQuery对象前,做了一个副本_$和_jQuery保存在自己的域中,当如果用户想要让jquery让出$和jQuery的值,将其还原为原来的版本时,可以使用noConflict方法。如:
<script src="//cdn.bootcss.com/jquery/1.4.0/jquery.js"></script>
<script>
console.log($.fn.jquery);
</script>
<script src="//cdn.bootcss.com/jquery/2.0.0/jquery.js"></script>
<script>
console.log($.fn.jquery);
//这里true和false的区别是,如果给true,不仅$要还原,jquery也要还原
$.noConflict(false);
console.log($.fn.jquery);
</script>
输出为:
1.4
2.0
1.4
这样执行noConflict后,$的版本还原为1.4了。事实上noConflict的返回值就是当前的jQuery对象,之前的“var $1_4 = $”也可以使用“var $1_4 = $.noConflict()”代替。
然后是第二个问题,两个同名的插件冲突,如何解决?
其实所有插件都是定义jQuery.fn或者jQuery上,jQuery也是一个js对象。所谓的jq插件,其实就是对jquery的命名空间扩展,如果之前已经定义了这个命名空间,再次定义肯定会覆盖之前那个。这里我想到了一个最笨的方法,就是同事引入两个jQuery对象,将同名插件分别定义在不同的jQuery对象上。至于怎么才能同事引入两个jQuery对象呢?答案很简单,参考jquery版本冲突的解决方案,你都可以同时使用jq1.4和jq2.0了,还不能同时引入两个jq吗?
jquery兼容实验的更多相关文章
- jquery 兼容的滚轮事件
// jquery 兼容的滚轮事件 $(document).on("mousewheel DOMMouseScroll", function (e) { ? : -)) || // ...
- jQuery兼容浏览器IE8方法
在维护公司网站的时候,发现在IE8下jquery会报对象不支持此属性或方法.缺少对象的错误: 在其他浏览器就可以正常运行,当前使用的jquery版本是3.1.1,查资料发现jquery从2.0开始不 ...
- JQuery兼容IE6问题汇总(不断更新)
兼容IE6真是苦逼的差事,无奈中... 逗号的问题:IE6中要去掉最后的逗号 var o={ id:1, Name:"abc", //这里的逗号一定要去掉 } HTML的结构,由于 ...
- JQuery 兼容所有浏览器的复制到剪切板功能
灵机一动想的点子,应该不难理解 <textarea onmousedown='selectAll(this);'>11111</textarea> function selec ...
- 兼容IE与firefox火狐的回车事件(js与jquery)
javascript 兼容IE与firefox火狐的回车事件 复制代码代码如下: <script language="javascript"> function key ...
- jQuery学习之路(1)-选择器
▓▓▓▓▓▓ 大致介绍 终于开始了我的jQuery学习之路!感觉不能再拖了,要边学习原生JavaScript边学习jQuery jQuery是什么? jQuery是一个快速.简洁的JavaScript ...
- Jquery制作--美化下拉框
平常我们用的原生select下拉框,大部分样式没办法修改,导致在不同的浏览器里面会跟设计图的风格大相径庭.所以为了能让它美化起来,就用JQ模拟了一个下拉框,可以随意定义样式.原生的下拉框也保留在div ...
- Jquery制作--循环滚动列表
自己模仿JQ插件的写法写了一个循环滚动列表插件,支持自定义上.下.左.右四个方向,支持平滑滚动或者间断滚动两种方式,都是通过参数设置.JQ里面有些重复的地方,暂时没想到更好的方法去精简.不过效果还是可 ...
- jQuery与Zepto的异同
一,同: Zepto最初是为移动端开发的库,是jQuery的轻量级替代品,因为它的API和jQuery相似,而文件更小.Zepto最大的优势是它的文件大小,只有8k多,是目前功能完备的库中最小的一个, ...
随机推荐
- CentOS6.4安装JDK1.7
安装说明 1.安装环境: CentOS6.4 64位系统 2.安装方式:rpm安装 3.软 件 包:jdk-7u71-linux-x64.rpm 4.下载地址:http://www.oracle.co ...
- 倒计时的js实现 倒计时 js Jquery
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=987 一.如火如荼的团 ...
- Lisk沙箱漏洞分析及解决方案
背景 比特股的创始人Daniel Larimer质疑了lisk系统中的一系列问题,绝大多数都被lisk的创始人之一Max正面回应过了,具体可以看看这个http://ethereum.stackexch ...
- 使用EF取数据库返回的数据
目录 一.取oracle自定义函数返回的自定义类型. 一.取oracle自定义函数返回的自定义类型. 1.首先创建一个函数返回自定义类型集合 --1.建立自定义类型 CREATE OR REPLACE ...
- Redhat环境下编译安装Google Bazel
Redhat环境下编译安装bazel 作者:Jack47 目前Google Bazel没有提供各个操作系统下的二进制安装包,只提供源代码,需要我们自己编译安装,详情可以见我翻译的中文版Google B ...
- 比官方教程代码更简短的SignalR Server Broadcast示例
SignalR是微软ASP.NET技术体系中的新成员. 在www.asp.net网站上的SignalR专区有一篇SignalR的入门级教程<Tutorial: Server Broadcast ...
- 由乱序播放说开了去-数组的打乱算法Fisher–Yates Shuffle
之前用HTML5的Audio API写了个音乐频谱效果,再之后又加了个播放列表就成了个简单的播放器,其中弄了个功能是'Shuffle'也就是一般播放器都有的列表打乱功能,或者理解为随机播放. 但我觉得 ...
- Qcon会议之所见所想
作为普通码农一枚,Qcon是俺参与过的最高级的技术大会了.大会共历时三天,因为俺第二天就得赶火车休个五一大长假,所以只参加了第一天4/25号的会议(其他俩天自然有其他同事会去观摩),不过第一天的会议有 ...
- Atitit 边缘检测原理attilax总结
Atitit 边缘检测原理attilax总结 1. 边缘检测的概念1 1.1. 边缘检测的用途1 2. 边缘检测方法分类1 3. 边缘检测的基本方法2 3.1. Roberts边缘检测算子2 3.2. ...
- Atitti onvif 设备发现与原理
Atitti onvif 设备发现与原理 1.1. ,有以下几个步骤:1 1.2. 设备搜索原理及编程技巧:2 1.3. Ws disconvert 的组播地址和端口就是37022 1)发现ipca ...