宝哥软件园

jQuery库冲突的完美解决方案

编辑:宝哥软件园 来源:互联网 时间:2021-09-04

在一次采访中,采访者问如何解决jQuery和其他库的冲突。虽然我以前见过,但我记不起来了。

我的想法是,如果我设计,我将使用默认值$。如果我不传递参数,我将使用$。最后,我会把它安装在窗户上。$.如果我传递参数,我会传入名称,比如jq,然后我会把它挂载到window.jq上

var myControl=' jq(函数(名称){ var $=name | | ' $//带$的name的值是name的值,name不存在或为null,$的值是字符串' $ ' console . log($);window[$]=function(){ alert(' 123 ');}})(myControl)窗口[my control]();事实上,这绝对不是jquery解决冲突的方法。让我们看看jQuery是如何解决冲突的。

jQuery的多个版本或与其他js库的冲突主要是常用的$符号的冲突。

第一,解决冲突

1.同一页面上多个版本jQuery的冲突解决方法

尸体!-介绍1.6.4版本的jq-script src=' http :3358 Ajax . googleapis.com/Ajax/libs/jquery/1 . 6 . 4/jquery . js '/script script var jq 164=jquery . noconfig lict(true);/脚本!-介绍1.4.2版本的jq-script src=' http :3358 Ajax . googleapis.com/Ajax/libs/jquery/1 . 4 . 2/jquery . js '/script script var jq 142=jquery . noconfig lict(true);/scriptscript(函数($){ //$此时是jQuery-1 . 6 . 4 $(' # ');})(jq 164);/scriptscriptjq142(函数($) {//$此时是jQuery-1 . 4 . 2 $(' # ');});/script /body2和jQuery库是在其他库之后导入的

jQuery noConflict()方法释放$标识符的控制,以便其他脚本可以使用它。

1.可以通过用jQuery的全名替换速记来使用jQuery

可以随时调用jQuery.noconflict()函数,在加载其他库和jQuery库后,将变量$的控制权转移到其他JavaSript库。然后,jQuery()函数可以在程序中作为jQuery对象的制造工厂。

script src=' http : prototype . js ' type=' text/JavaScript '/script script src=' http : jQuery . js ' type=' text/JavaScript '/script p id=' PP ' test-prototype/pptest-jQuery/pscript type=' text/JavaScript ' jQuery . noconfig lict();//将变量$的控制权转移到prototype.js中,不能调用全名。JQuery(function(){ //使用jquery jquery ('p ')。点击(function () {alert (jquery (this))。text());});});//这里不能写$啊。此时,$代表prototype . js $(' PP '). style . display=' none '中定义的$符号;//使用prototype/script2并自定义快捷方式

NoConflict()可以返回对jQuery的引用,可以保存在自定义名称中,如jq,$J变量,供以后使用。

这确保了jQuery不与其他库冲突,同时,它使用自定义快捷方式。

脚本类型=' text/JavaScript ' var $ j=jquery . noconfiglict();//自定义一个简短的快捷方式$j(function(){ //使用jquery $ j ('p ')。单击(function () {alert ($ j (this))。text()));});});$(“PP”). style . display=“none”;//使用prototype/script3,仍然使用$而没有冲突

如果您想在jQuery代码块中使用$速记,并且不想更改此快捷方式,可以将$符号作为变量传递给ready方法。这样,您可以在函数内部使用$符号,但在函数外部仍然必须使用‘jQuery’。

脚本类型=' text/JavaScript ' jquery . noconfiglict();//将变量$的控制权转移到prototype.jsjquery(文档)。ready(函数($) {$ ('p '))。单击(function(){//继续使用$方法alert($(this))。text());});});//或者跟随jQuery(函数($){ //使用jquery $ ('p ')。单击(function(){//继续使用$方法alert($(this))。text());});});/script或使用IEF语句块,这应该是最好的方法,因为只需最少的代码更改就可以实现完全兼容。

我们在编写jquery插件的时候,都应该使用这种编写方法,因为我们不知道在具体的工作过程中如何依次引入各种js库,但是这种语句块的编写方法可以屏蔽冲突。

脚本类型=' text/JavaScript ' jquery . noconfiglict();//将变量$的控制权转移到prototype.js(function($){ //定义匿名函数,将参数设置为$ $(function(){ //匿名函数里面的$都是jQuery $ ('p ')。单击(函数(){//继续使用$方法预警($ (this).});});})(jQuery);//执行匿名函数并传递参数jquery $(“PP”)。风格。显示='无';//使用prototype/script3和jQuery库在其他库之前导入

jQuery库在其他库之前导入,默认情况下$的所有权属于它后面的JavaScript库。可以直接用‘jQuery’做一些jQuery的工作。

同时,您可以使用$()方法作为其他库的快捷方式。这里不需要调用jQuery.noConflict()函数。

!-引入jquery-脚本src=' http:/./scripts/jquery . js ' type=' text/JavaScript '/script!-介绍原型-脚本src=' http : lib/prototype . js ' type=' text/JavaScript '/脚本体p id=' PP' test-prototype(待隐藏)/pp Test-jQuery(待绑定点击事件)/Pscript type=' text/JavaScript ' jQuery(function(){//直接使用jQuery,无需调用' jQuery.noConflict()'函数。jQuery('p ')。点击(function(){ alert(jQuery)(这个)。text());});});$(“PP”). style . display=“none”;//使用原型/脚本/body ii。原则

1.源代码

源代码:看看在源代码中是怎么做的

var//在overwrite_jQuery=window.jQuery的情况下映射到jQuery上,//在overwrite_$=window的情况下映射到$上。$,jQuery.extend({ noConflict:)函数(深度){ if (window。$===jQuery ) { window。$=_$;} if(deep window . jQuery===jQuery){ window . jQuery=_ jQuery;}返回jQuery}});加载jQuery时,通过预先声明的_jQuery变量获取当前window.jQuery,当前window。$是通过_ $获得的。

使用jQuery.extend()在jQuery下挂载noConflict。因此,当我们调用它时,我们都使用jQuery.noConflict()。

调用noConflict()时做了两个判断,

第一个如果,放弃对$的控制。

第二个if,当noConflict()作为参数传递时,放弃对jQuery的控制。

最后,noConflict()返回jQuery对象,该对象使用哪个参数接收,哪个参数将拥有jQuery的控制权。

2.确认

//冲突var $=123//假设其他库中的$是123 $(function(){ console . log($);//错误unsughttypeerror : $不是函数});解决(之间的)冲突

//解决冲突var jq=$。noConflict();var $=123jq(function(){ alert($);//123 });释放$

脚本var $=123//窗口。$是123,存储在private _ $。/script script src=' http :https://code . jquery.com/jquery-2 . 2 . 4 . js '/scriptbodydivaa/div script var jq=$。noConflict();//当窗口。$===jQuery,_ $被分配给window。$.jq(function(){ alert($);//123 });通过/script释放jQuery控件的示例

参数deep的作用:deep用于放弃jQuery的外部接口。

如下,noConflict()不写参数,jQuery作为构造函数弹出。

脚本var $=123var jQuery=456/script script src=' http :https://code . jquery.com/jquery-2 . 0 . 3 . js '/scriptbodydivaa/div script var jq=$。noConflict();jq(function(){ alert(jQuery));//构造函数});/脚本

如果你写一个参数为真,会弹出456。

脚本var $=123var jQuery=456/script script src=' http :https://code . jquery.com/jquery-2 . 0 . 3 . js '/scriptbodydivaa/div script var jq=$。noConflict(真);//当写入true或参数时,deep为true。window.jQuery===jQuery为真,所以如果输入了条件。将456赋值给window . jQuery jq(function(){ alert(jQuery));//456 });/脚本摘要

以上就是本文的全部内容。希望本文的内容能给你的学习或工作带来一些帮助。有问题可以留言交流。谢谢你的支持。

更多资讯
游戏推荐
更多+