位置: 编程技术 - 正文

三分钟带你玩转jQuery.noConflict()(三分钟带你玩转灭火器)

编辑:rootadmin

推荐整理分享三分钟带你玩转jQuery.noConflict()(三分钟带你玩转灭火器),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:我来教你玩,三分钟带你玩转我的世界,三分钟带你玩转灭火器,玩法教程,三分钟带你玩转灭火器,三分钟带你玩转灭火器,三分钟带你玩转灭火器,三分钟带你玩转最强音乐软件,内容如对您有帮助,希望把文章链接给更多的朋友!

jQuery是目前使用最广泛的前端框架之一,有大量的第三方库和插件基于它开发。为了避免全局命名空间污染,jQuery提供了jQuery.noConflict()方法解决变量冲突。这个方法,毫无疑问,非常有效。遗憾的是,jQuery的官方文档对该方法的描述不够清晰,许多开发者并不清楚当他们调用jQuery.noConflict()时,究竟发生了什么,从而导致在使用时出现了许多问题。尽管如此,jQuery.noConflict()背后实现原理依然值得Web开发者学习掌握,成为解决类似全局命名空间污染问题的利器。

jQuery.noConflict()的作用?

&#;&#;jQuery.noConflict()的存在只有一个目的:它允许你在同一个页面加载多个jQuery实例,尤其是不同版本的jQuery。你可能会觉得奇怪,为什么要在一个页面加载/使用多个不同版本的jQuery对象呢?一般而言,有两种情况。第一种情况,你的业务代码采用了最新版的jQuery库,而你选用的第三方插件依赖的更早版本的jQuery库;第二种情况,你正维护着一个系统,它已有的业务代码由于各种原因,引用了较老版本的jQuery库,你新开发的模块采用的是其他版本的jQuery库。不论哪种情况,你都不得不面对,jQuery对象/方法冲突的问题。幸运的是,jQuery.noConflict()帮你解决了这个烦恼。

jQuery被加载时发生了什么?

当jQuery被页面引用/加载时,它被封装在一个自执行函数(匿名函数)里,它提供的所有一切变量、函数、对象都在匿名函数内部的可执行环境内,外部环境无法调用,以防止全局命名空间污染。

jQuery在匿名函数内部定义了两个全局对象:jQuery和$,把自己暴露给外部环境。开发者习惯使用的各种公共方法都是通过这两个对象进行访问的,如jQuery.ajax(),jQuery.css()等。在最初,它们指向匿名函数内部的同一个对象jQuery(私有变量),通过它访问匿名函数内部的私有变量和函数。这使得匿名函数在自执行后其内部的私有变量和函数仍然进驻在内存里,不会被javascript的垃圾回收机制清除。

当jQuery被页面加载后,当前页面有可能已经存在了jQuery和$这两个全局变量(比如,加载了其它的第三方库,其内部也定义了它俩),这就会导致已经存在的对象被覆盖(全局命名空间污染)。为了解决这个问题,jQuery在内部先将已经存在的全局变量缓存起来,保存在私有变量_jQuery和_$中,供后续调用。所以,如果页面在加载jQuery库时,还不存在jQuery和$对象,那么_jQuery和_$都是undefined;否则,它们都会保存对已有jQuery和$的引用(也许来自之前引用的第三方库或是不同版本的jQuery库)。之后,jQuery会像上文说描述的那样,覆盖这两个全局变量并将自己暴露给外部环境。至此,页面上的全局变量jQuery和$已经指向刚刚引入的jQuery库。

jQuery.noConflict()的神奇效果?

假设你维护的系统已经引用了1.7.0版本的jQuery库,而你在新添加的功能里引用了1..2版本的jQuery库。那么,还有办法重新使用jQuery 1.7.0 或是同时使用两个版本的jQuery库吗?答案是肯定,那就是jQuery.noConflict()。实际上,利用jQuery.noConflict(),你可以立刻把全局变量jQuery和$重新指向之前引用的对象。很神奇吧?这就是为什么jQuery在对外暴露自己前内部缓存了之前引用的对象。

&#;&#;jQuery.noConflict()接受一个可选的布尔值参数,通常默认值是false。这个参数会带来什么影响呢?其实,很简单。如果调用jQuery.noConflict()或是jQuery.noConflict(false),只有全局变量$会被重置恢复成之前的引用值;如果调用jQuery.noConflict()或是jQuery.noConflict(true),那么全局变量jQuery和$都会被重置恢复成之前的引用值。这一点非常重要,建议牢记。当你调用jQuery.noConflict(false/true)之后,它会返回当前jQuery的实例,利用这个特性我们可以实现jQuery的重命名。

我们再来看一个代码片段,测试一下是否真正理解了神奇的noConflict()

避免第三方库的冲突

以上的代码片段展示了如何解决多版本jQuery的冲突。接下来,我们尝试解决jQuery库和第三方库的冲突,下面出现的代码片段在jQuery的官方文档中都有,有兴趣的程序猿可以仔细阅读官方文档体会其中的区别。

三分钟带你玩转jQuery.noConflict()(三分钟带你玩转灭火器)

直接使用No-Conflict模式

使用No-Conflict模式,其实就是对jQuery进行重命名,再调用。

使用自执行函数封装

使用这种方式,你可以在匿名函数内部继续使用标准的$对象,这也是众多jQuery插件采用的方法。需要注意的是,使用这种方法,函数内部无法再使用prototype.js定义的$对象了。

使用标准jQuery(document).ready()函数

如果jQuery库在其它库之前引入,那么jQuery内部定义的jQuery和$会被第三方库覆盖,这时候再使用noConflict()已经没有什么意义了。解决的方法很简单,直接使用jQuery的标准调用方式。

下面给大家介绍jQuery noConflict() 方法

noConflict() 方法会释放会 $ 标识符的控制,这样其他脚本就可以使用它了。

实例

当然,您仍然可以通过全名替代简写的方式来使用 jQuery:

实例

您也可以创建自己的简写。noConflict() 可返回对 jQuery 的引用,您可以把它存入变量,以供稍后使用。请看这个例子:

实例

如果你的 jQuery 代码块使用 $ 简写,并且您不愿意改变这个快捷方式,那么您可以把 $ 符号作为变量传递给 ready 方法。这样就可以在函数内使用 $ 符号了 - 而在函数外,依旧不得不使用 "jQuery":

jquery实现具有收缩功能的垂直导航菜单 本文介绍一种比较常见的导航菜单是如何实现的,它具有垂直结构,点击导航主标题可以展开或者折叠二级菜单。代码实例如下:!DOCTYPEhtmlhtmlheadmetacharset

jquery拖拽排序简单实现方法(效果增强版) 本文实例讲述了jquery拖拽排序简单实现方法。分享给大家供大家参考,具体如下:运行效果截图如下:原来没有新建动作,分析代码后发现很容易增强~~

jQuery Timelinr实现垂直水平时间轴插件(附源码下载) jquery.timelinr.js是一款效果非常炫酷的jQuery时间轴插件。jquery.timelinr可以制作水平和垂直时间轴效果,并且可以进行自动播放。你可以通过参数来控制每

标签: 三分钟带你玩转灭火器

本文链接地址:https://www.jiuchutong.com/biancheng/381965.html 转载请保留说明!

上一篇:轻松搞定jQuery.noConflict()(轻松搞定是什么短语)

下一篇:jquery实现具有收缩功能的垂直导航菜单(jquery中可以用什么方法来获取和设置元素属性)

  • 小规模季度不超过30万是含税还是不含税
  • 什么是代扣代缴申报
  • 电子承兑汇票贴现流程
  • 什么时候过路费是半价
  • 坏账准备计入营业外支出还是资产减值损失
  • 增值税普通发票有什么用
  • 2021小规模纳税人减免增值税
  • 小规模开专票要计提附加税吗
  • 坏账准备递延所得税资产怎么算
  • 自产产品用于职工福利确认收入吗
  • 原材料进口关税怎么算
  • 临时工工资为什么那么低?
  • 企业存款利息计入什么科目
  • 公司账上的应付账款是指
  • 电子商务支付平台有哪些
  • 工会经费滞纳金是多少
  • 用理财产品去抵债违法吗
  • 住宅租给公司需要注意什么
  • 印花税的计税金额
  • 加油款可以开专用发票吗
  • 车间扫帚存放架子
  • 不交社保一告一个准罚多少钱
  • 土地使用权出让金收费标准
  • 多交的公积金怎么退回来
  • 机关党建经费提取比例
  • centos7安装部署cacti教程
  • 公司购买理财产品账务处理
  • win10好几个操作系统
  • 下列关于企业发生的税费说法正确的是
  • 城建税的会计账务处理
  • linux系统如何更改主机名
  • 采用权益法核算
  • 固定资产一次性扣除后第二年账务处理
  • 办公楼需要什么
  • 政府补贴款计入什么科目是否纳税
  • 发票开错需要让客户寄回来吗
  • ts类型声明 要为某个文件里的变量声明吗
  • 一次开票分期确认怎么弄
  • 装饰工程公司施工一般包括哪些内容?
  • 发票金额和打款金额不一致怎么办
  • 房地产销售未完工产品转完工产品确认的销售收入
  • 税控盘抵扣怎么做账
  • 为什么很多公司选择股票上市
  • 哪些收入需要缴纳个人所得税
  • 在发票上盖了公章有用吗
  • 安置房是交付的时候交钱吗
  • 将MySQL help contents的内容有层次的输出方法推荐
  • 在校大学生可以考教师资格证吗
  • 应发工资账务处理
  • 记账凭证错误的更正方法
  • 一次开票分期确认收入
  • 建筑业发票可以开工程施工吗
  • 其他权益工具是所有者权益类科目吗
  • 存出投资款应计入什么科目
  • 福利费取得的专票不能抵扣账怎么做
  • 雨林木风 u盘
  • win8链接wi-fi
  • ghost装机顺序
  • linux中链接
  • win7开始菜单路径在哪里
  • 图解在OS X中管理窗口大小的多种方法
  • linux系统怎么配置路由
  • windows如何编辑内容
  • 内存一次性读多少字节
  • 第三方解决方案
  • Extjs Label的 fieldLabel和html属性值对齐的方法
  • linux安装jdk和tomcat
  • python如何用
  • jsp生成uuid
  • three. js
  • jquery动态效果
  • android+
  • JavaScript中的NaN代表什么
  • 税务局约谈严重吗
  • 深圳社保最迟每月几号交啊多少钱
  • 医保预交金可以取出来吗
  • 汽车购置税网上缴纳流程
  • 房产营业税满2年怎么算
  • 上海如何用电子医保卡
  • 红星新闻河南郑州
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设