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多,是目前功能完备的库中最小的一个, ...
随机推荐
- JS请求服务器并使页面跳转(转)
前段时间在项目中用到了前台框架EasyUI,各种组件都是差不多都是用js来渲染的,这样一些页面请求就必须用js代码来写. 但是js请求就不和html请求的玩法不怎么相同,比如我要向服务器发送一个请求然 ...
- ABP理论学习之MVC视图
返回总目录 本篇目录 介绍 AbpWebViewPage基类 介绍 ABP通过Abp.Web.Mvc Nuget包集成了MVC视图.因此你可以像常规那样创建MVC视图. AbpWebViewPage基 ...
- HTML5- Canvas入门(七)
这是本系列的最后一篇入门文章,主要是对剩余的未说明的canvas方法来逐个介绍. 首先,如果你是一名擅长矢量设计的设计师,对Illustrator或者Fireworks很熟悉的话,那你肯定知道它们有一 ...
- 剑指Offer面试题:3.替换空格
一.题目:替换空格 题目:请实现一个函数,把字符串中的每个空格替换成"%20".例如输入“We are happy.”,则输出“We%20are%20happy.”. 在网络编程中 ...
- Wakatime 测试工作时间
Wakatime – 现在几点了,你在做什么呢 前面提到了一个用来QS自己的工具Clarify.这次介绍一个专门给程序员用的工具.大家都知道一万小时定律,但我究竟写java写了多久了呢?WakaTim ...
- HTML5_03之Canvas绘图
1.Canvas绘图--JS绘图: <canvas id='c1' width='' height=''></canvas> * Canvas尺寸不能用CSS设置: c1.he ...
- PLSQL使用技巧
PL/SQL Developer记住登陆密码 在使用PL/SQL Developer时,为了工作方便希望PL/SQL Developer记住登录Oracle的用户名和密码: 设置方法:PL/SQ ...
- DPI深度包检测
最近在读网络协议方面的论文,接触到DPI技术.博主是个小白,这里写些查到的笔记. 原文出处因为比较多,杂乱.百度文库和许多地方都有,就不贴链接了. 1. DPI 全称为"Deep Packe ...
- SSIS 数据类型和类型转换
在进行ETL开发时,数据类型(Data Type)是最基础的,但也容易被忽略,楼主使用的SQL Server 版本是2012,用此博文记录,常用的SSIS数据类型和TSQL数据类型的映射.SSIS的数 ...
- VS中行号对齐的辅助线(虚线)去除
3张图 2 3