麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

JQuery的$命名沖突詳細解析

2019-11-20 21:21:25
字體:
來源:轉載
供稿:網友

在Jquery中,$是JQuery的別名,所有使用$的地方也都可以使用JQuery來替換,如$('#msg')等同于JQuery('#msg')的寫法。然而,當我們引入多個js庫后,在另外一個js庫中也定義了$符號的話,那么我們在使用$符號時就發生了沖突。下面以引入兩個庫文件jquery.js和prototype.js為例來進行說明。

第一種情況:jquery.js在prototype.js之后進行引入,如:
<script src="prototype.js" type="text/javascript"/>
<script src="jquery.js" type="text/javascript"/>

在這種情況下,我們在自己的js代碼中如下寫的話:

$('#msg').hide();

$永遠代表的是jquery中定義的$符號,也可以寫成JQuery('#msg').hide();如果想要使用prototype.js中定義的$,我們在后面再介紹。


第二種情況:jquery.js在prototype.js之前進行引入,如:
<script src="jquery.js" type="text/javascript"/>
<script src="prototype.js" type="text/javascript"/>

在這種情況下,我們在自己的js代碼中如下寫的話:

$('#msg').hide();

$此時代表的prototype.js中定義的$符號,如果我們想要調用jquery.js中的工廠選擇函數功能的話,只能用全稱寫法JQuery('#msg').hide().

下面先介紹在第一種引入js庫文件順序的情況下,如何正確的使用不同的js庫中定義的$符號。

一.使用JQuery.noConflict()
該方法的作用就是讓Jquery放棄對$的所有權,將$的控制權交還給prototype.js,因為jquery.js是后引入的,所以最后擁有$控制權的是jquery。它的返回值是JQuery。當在代碼中調用了該 方法以后,我們就不可以使用$來調用jquery的方法了,此時$就代表在prototype.js庫中定義的$了。如下:

JQuery.noConflict();

//此處不可以再寫成$('#msg').hide(),此時的$代表prototype.js中定義的$符號。
JQuey('#msg').hide();

自此以后$就代表prototype.js中定義的$,jquery.js中的$無法再使用,只能使用jquery.js中$的全稱JQuery了。


二.自定義JQuery的別名
如果覺得第一種方法中使用了JQuery.noConflict()方法以后,只能使用JQuery全稱比較麻煩的話,我們還可以為JQuery重定義別名。如下:

var $j=JQuery.noConflict();
$j('#msg').hide();//此處$j就代表JQuery
自此以后$就代表prototype.js中定義的$,jquey.js中的$無法再使用,只能使用$j來作為jquey.js中JQuery的別名了。


三.使用語句塊,在語句塊中仍然使用jquery.js中定義的$,如下:
JQuery.noConflict();
JQuery(document).ready(function($){
$('#msg').hide();//此時在整個ready事件的方法中使用的$都是jquery.js中定義的$.
});

或者使用如下語句塊:

(function($){
.....
$('#msg').hide();//此時在這個語句塊中使用的都是jquery.js中定義的$.
})(JQuery)

如果在第二種引入js庫文件順序的情況下,如何使用jquery.js中的$,我們還是可以使用上面介紹的語句塊的方法,如:

復制代碼 代碼如下:

<script src="jquery.js" type="text/javascript"/>
<script src="prototype.js" type="text/javascript"/>
<script type="text/javascript">

(function($){
.....
$('#msg').hide();//此時在這個語句塊中使用的都是jquery.js中定義的$.
})(JQuery)
</script>


這種使用語句塊的方法非常有用,在我們自己寫jquery插件時,應該都使用這種寫法,因為我們不知道具體工作過程中是如何順序引入各種js庫的,而這種語句塊的寫法卻能屏蔽沖突。

(function($){})(jQuery)

1 首先(function(){})()這種寫法 是創建了一個匿名的方法并立即執行(function(){})這個是匿名方法后面的括號就是立即調用了這個方法)。
這樣做可以創建一個作用域以保證內部變量與外部變量不發生沖突,比如$ jQuery 等jquery內部定義的變量。

2 (function($){})(jQuery) 這個寫法主要的作用還是保證jquery不與其他類庫或變量有沖突 首先是要保證jQuery這個變量名與外部沒有沖突(jquery內部$與jQuery是同一個東西 有兩個名字的原因就是怕$與其他變量名有沖突二jQuery與其他變量沖突的幾率非常小)并傳入匿名對象,匿名對象給參數起名叫做$(其實和jquery內部是一樣的) 然后你就可以自由的在(function($){})(jQuery)里寫你的插件而不需要考慮與外界變量是否存在沖突

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲网站一区 | 免费在线中文字幕 | 欧美日韩专区国产精品 | 欧美日韩视频第一页 | 日本欧美一区二区三区在线观看 | 九九热精品在线 | www.91sese| 精品国产一区二区三区久久久蜜月 | 日韩美香港a一级毛片 | 精品久久久一 | 国产大片中文字幕在线观看 | 成人aaaa免费全部观看 | 九九热九九热 | 欧美日本国产精品 | 草人人| 亚洲小视频网站 | 国产成人精品一区二区视频免费 | 中文字幕一区久久 | 午夜在线观看视频网站 | 一日本道久久久精品国产 | 欧美大荫蒂xxx | 久国产| 亚洲欧美成aⅴ人在线观看 免费看欧美黑人毛片 | 精品国产91久久久久 | 在线观看视频亚洲 | 精品亚洲在线 | 久久人人av | 色视频在线观看 | 欧美国产一级片 | aa国产视频一区二区 | www.国产.com| 欧美巨根| 成人免费网站在线观看视频 | 中文字幕在线观看免费视频 | 九九热视频在线免费观看 | 91 在线| 欧美成人自拍 | av免费在线观看国产 | 把娇妻调教成暴露狂 | 日韩视频一区二区三区四区 | 国产亚洲精彩视频 |