快速解决jQuery与其他库冲突的方法介绍


Posted in Javascript onJanuary 02, 2014

通常,当在同一个页面上使用jQuery和其他库时,全局名称$的定义是最大的争论和冲突的焦点。众所周知,jQuery使用$作为jQuery名称的别名,并将其用于jQuery公开的每一个功能,但是其他库,最著名的就是Prototype,也使用$名称。

1. jQuery提供了$.noConflict()实用函数用来放弃对$标识符的占用,以便其他库使用它。

该函数的语法如下:
$.noConflict(jqueryToo)

将标识符$的控制权归还给其他库,允许在页面上混合使用jQuery与其他库。一旦执行了该函数,必须使用jQuery标识符而不是$标识符来调用jQuery的功能,

你也可以放弃jQuery标识符(可选)

应该在包含了jQuery之后,但尚未包含冲突库之前调用这个方法。

尽管使用的是jQuery标识符,但因为$是jQuery的别名,所以在应用$.noConflict()之后所有jQuery的功能依然可用。我们可以定义更短的,但没有冲突的jQuery别名,例如

var  $j = jQuery ;

2. 另一个常见的习惯用法是创建一个作用域环境,在该环境中$标识符指向jQuery对象,在扩展jQuery的时候这是个常用技巧,特别是对于插件作者来说,他们不可能对于页面开发者是否已经调用$.noConflict()作出任何假设,当然也不能自行调用此函数以免破坏页面开发者的意愿,

这个习惯用法如下:
(function($) { }) (jQuery);
(function($) { })

这部分声明了一个函数并用圆括号括起来,由此生成一个表达式,这个表达式的结果是对一个匿名函数的引用,这个函数期望传入单个参数并将其命名为$,在函数主体中,可以通过$标识符来引用任何传递给这个函数的东西。因为参数声明优先于全局作用域中任何类似的命名标识符,所以任何在函数外定义的$值在函数内都会被传入的参数所代替。

(jQuery)

在匿名函数上执行函数调用,将jQuery对象作为参数传递

在函数外部不管$标识符是否已经在Prototype或其他库中定义,在函数体内它总是指向jQuery对象。

当使用这个技巧时,外部声明的$在函数体内是不可用的。

3. 第二种的用法的一个变体也经常用于声明就绪处理函数,从而形成了第三种语法,
jQuery( function($){
})

当编写可重用的组件并且这些组件可能会用于已经使用了$.noConflict()的页面时,最好对$的定义采取这种预防措施。

Javascript 相关文章推荐
基于JQuery实现相同内容合并单元格的代码
Jan 12 Javascript
js字符串转换成xml对象并使用技巧解读
Apr 18 Javascript
原生Javascript封装的一个AJAX函数分享
Oct 11 Javascript
javascript中sort()的用法实例分析
Jan 30 Javascript
关于JS中prototype的理解
Sep 07 Javascript
js HTML5 Ajax实现文件上传进度条功能
Feb 13 Javascript
学习Angularjs分页指令
Jul 01 Javascript
AngularJs Managing Service Dependencies详解
Sep 02 Javascript
JavaScript事件用法浅析
Oct 31 Javascript
jQuery实现简易的输入框字数计数功能示例
Jan 16 Javascript
微信小程序之电影影评小程序制作代码
Aug 03 Javascript
jquery ztree实现右键收藏功能
Nov 20 jQuery
js/jQuery简单实现选项卡功能
Jan 02 #Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
Dec 31 #Javascript
js判断字符长度以及中英文数字等
Dec 31 #Javascript
checkbox全选所涉及到的知识点介绍
Dec 31 #Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
Dec 31 #Javascript
js类式继承的具体实现方法
Dec 31 #Javascript
利用javascript判断文件是否存在
Dec 31 #Javascript
You might like
PHP基础知识介绍
2013/09/17 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
2014/11/17 PHP
使用PHP+AJAX让WordPress动态加载文章的教程
2015/12/11 PHP
thinkPHP基于ajax实现的菜单与分页示例
2016/07/12 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
2020/04/22 PHP
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
2013/06/05 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
用于deeplink的js方法(判断手机是否安装app)
2014/04/02 Javascript
javascript弹出拖动窗口
2015/08/11 Javascript
自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选与多选下拉框
2015/12/12 Javascript
详解js中class的多种函数封装方法
2016/01/03 Javascript
js停止冒泡和阻止浏览器默认行为的简单方法
2016/05/15 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
详解关于Vuex的action传入多个参数的问题
2019/02/22 Javascript
简单了解JavaScript中的执行上下文和堆栈
2019/06/24 Javascript
Vue实现简单计算器案例
2020/02/25 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
[01:00:44]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第三局
2016/03/04 DOTA
Python中使用插入排序算法的简单分析与代码示例
2016/05/04 Python
Python 多线程不加锁分块读取文件的方法
2018/12/11 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
python实现大文本文件分割
2019/07/22 Python
K最近邻算法(KNN)---sklearn+python实现方式
2020/02/24 Python
彻底解决Python包下载慢问题
2020/11/15 Python
HTML5+CSS3实例 :canvas 模拟实现电子彩票刮刮乐代码
2016/12/30 HTML / CSS
html5 移动端视频video的android兼容(去除播放控件、全屏)
2020/03/26 HTML / CSS
Servlet的实例是在生命周期什么时候创建的?配置servlet最重要的是什么?
2012/05/30 面试题
学习十八大坚定理想信念心得体会
2014/03/11 职场文书
爱我中华教学反思
2014/04/28 职场文书
美食节目策划方案
2014/05/31 职场文书
小学生推普周国旗下讲话稿
2014/09/21 职场文书
班子个人四风问题整改措施
2014/10/04 职场文书
立秋之描写立秋的作文(五年级)
2019/08/08 职场文书