JQuery的$和其它JS發(fā)生沖突的快速解決方法

本篇文章主要是對(duì)JQuery的$和其它JS發(fā)生沖突的快速解決方法進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助

眾所周知,jQuery是目前最流行的JS封裝包,簡(jiǎn)化了很多復(fù)雜的JS程序,JQuery將瀏覽器DOM樹(shù)定義為$,通過(guò)$來(lái)獲取各個(gè)子節(jié)點(diǎn)。

然后,JS插件并非只有JQuery,還有prototype.js 等其它比較好的插件。它們也使用$。所以有時(shí)候同時(shí)使用這個(gè)兩個(gè)JS插件的時(shí)候,就會(huì)出現(xiàn)$的使用權(quán)沖突問(wèn)題。現(xiàn)在我們來(lái)看看如何解決這個(gè)沖突問(wèn)題。請(qǐng)看下文:

我們都知道JQuery有一個(gè)函數(shù),jquery.noConflict() 它的作用是講$的控制權(quán)轉(zhuǎn)讓出去。然后我們可以通過(guò)jQuery代替$來(lái)獲取dom節(jié)點(diǎn)。

第一種情況:先加載Prototype.js,再加載jQuery.js
jQuery noConflict() 方法會(huì)釋放會(huì) $ 標(biāo)識(shí)符的控制,這樣其他腳本就可以使用它了。
使用jQuery.noConflict();主要作用是在任何時(shí)候,只要在jQuery加載后就可以調(diào)用,將$符號(hào)的使用權(quán)返回給其它的js庫(kù),jQuery在創(chuàng)建它自己的名字空間時(shí)就將其它庫(kù)的$保存在自己的一個(gè)變量當(dāng)中。

第二種情況:先加載jQuery.js,再加載Prototype.js
按照這樣的順序加載,就不存在其它js庫(kù)的$符號(hào)被jQuery占用的問(wèn)題。

舉例:

</br>
方法一:
通過(guò)全名替代簡(jiǎn)寫(xiě)的方式來(lái)使用 jQuery

< script type = "text/javascript" >
jQuery.noConflict(); //將變量$的控制權(quán)讓渡給prototype.js
jQuery(function() { //使用jQuery
    jQuery("p").click(function() {
        alert(jQuery(this).text());
    });
});
$("pp").style.display = 'none'; //使用prototype
< /script>/

</br>
方法二:
可以創(chuàng)建自己的簡(jiǎn)寫(xiě),通過(guò)noConflict()函數(shù)來(lái)定義一個(gè)快捷方式用來(lái)獲取dom節(jié)點(diǎn)

< script type = "text/javascript" >
var $j = jQuery.noConflict(); //自定義一個(gè)比較短快捷方式
$j(function() { //使用jQuery
    $j("p").click(function() {
        alert($j(this).text());
    });
});
$("pp").style.display = 'none'; //使用prototype
< /script>/

缺點(diǎn):引入了這段代碼后,不僅是當(dāng)前的js文件,該html引用的所有js中,如果有用到j(luò)query中的$,都得用$j來(lái)代替之前的$
</br>
方法三:
如果你的 jQuery 代碼塊使用 $ 簡(jiǎn)寫(xiě),并且您不愿意改變這個(gè)快捷方式,那么您可以把 $ 符號(hào)作為變量傳遞給 ready 方法。這樣就可以在函數(shù)內(nèi)使用 $ 符號(hào)了 - 而在函數(shù)外,依舊不得不使用 "jQuery":

< script type = "text/javascript" > 
jQuery.noConflict(); //將變量$的控制權(quán)讓渡給prototype.js

//方法3-1
jQuery(document).ready(function($) {
    $("p").click(function() { //繼續(xù)使用 $ 方法
        alert($(this).text());
    });
});

//方法3-2
jQuery(function($) { //使用jQuery
    $("p").click(function() { //繼續(xù)使用 $ 方法
        alert($(this).text());
    });
});

$("pp").style.display = 'none'; //使用prototype
< /script>

方法3-1?缺點(diǎn):只對(duì)ready嵌套內(nèi)的代碼有效,對(duì)嵌套外的代碼是無(wú)效的。如果你所有的邏輯,都在寫(xiě)ready函數(shù)中,那沒(méi)問(wèn)題。但我們一般都會(huì)在ready函數(shù)之外寫(xiě)一些子函數(shù),然后ready函數(shù)再去調(diào)用這些函數(shù)。這個(gè)方案對(duì)這些函數(shù)是無(wú)效的,因此這套方案有局限性。

</br>
方法四:
使用語(yǔ)句塊

< script type = "text/javascript" > 
jQuery.noConflict(); //將變量$的控制權(quán)讓渡給prototype.js
(function($) { //定義匿名函數(shù)并設(shè)置形參為$
    $(function() { //匿名函數(shù)內(nèi)部的$均為jQuery
        $("p").click(function() { //繼續(xù)使用 $ 方法
            alert($(this).text());
        });
    });
})(jQuery); //執(zhí)行匿名函數(shù)且傳遞實(shí)參jQuery
$("pp").style.display = 'none'; //使用prototype
< /script>

這種使用語(yǔ)句塊的方法非常有用,在我們自己寫(xiě)jquery插件時(shí),應(yīng)該都使用這種寫(xiě)法,因?yàn)槲覀儾恢谰唧w工作過(guò)程中是如何順序引入各種js庫(kù)的,而這種語(yǔ)句塊的寫(xiě)法卻能屏蔽沖突。
</br>

推薦方法三(3-2),方法四,特別是開(kāi)發(fā)js插件時(shí):

這兩個(gè)方法,沒(méi)有上面兩個(gè)方法的缺點(diǎn),只會(huì)影響到被包在jQuery(function($){}中的代碼。 不會(huì)影響到其他js代碼,這一點(diǎn)很重要。試想一下,假如你寫(xiě)了一個(gè)js公共組件,該組件需要用到j(luò)query,為了提高魯棒性,需考慮$符號(hào)沖突問(wèn)題。如果使用方案二,那么別人在使用時(shí),還得遵守你的約定,把自己js代碼中的$改成$j,而如果使用方案三(3-2),方案四,既能避免$沖突對(duì)該組件的影響,又無(wú)需要求使用公共組件的人修改自己的代碼。

</br>


注意:
1.引用javascript類庫(kù)時(shí),把jQuery引用放在最后面,可以避免沖突。
2.特別要注意jQuery()代替$()時(shí),jQuery是區(qū)分大小寫(xiě)的,因?yàn)閖avascript本身就是區(qū)分大小寫(xiě)的。

整理來(lái)源:http://www.jb51.net/article/46152.htm
????? http://www.jb51.net/article/90293.htm
??????http://www.jb51.net/article/47028.htm

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 通過(guò)jQuery,您可以選?。ú樵?,query)HTML元素,并對(duì)它們執(zhí)行“操作”(actions)。 jQuer...
    枇杷樹(shù)8824閱讀 724評(píng)論 0 3
  • 1.JQuery 基礎(chǔ) 改變web開(kāi)發(fā)人員創(chuàng)造搞交互性界面的方式。設(shè)計(jì)者無(wú)需花費(fèi)時(shí)間糾纏JS復(fù)雜的高級(jí)特性。 1....
    LaBaby_閱讀 1,274評(píng)論 0 1
  • 1.JQuery 基礎(chǔ) 改變web開(kāi)發(fā)人員創(chuàng)造搞交互性界面的方式。設(shè)計(jì)者無(wú)需花費(fèi)時(shí)間糾纏JS復(fù)雜的高級(jí)特性。 1....
    LaBaby_閱讀 1,505評(píng)論 0 2
  • 請(qǐng)記得在進(jìn)行JQuery類庫(kù)的運(yùn)用時(shí),加入JQuery類庫(kù),并且要保證先寫(xiě)文檔就緒函數(shù) $(document).r...
    Sunshinemm閱讀 3,034評(píng)論 1 40
  • 當(dāng)用WebView加載URL時(shí)因?yàn)閡rl中包含#號(hào),所以WebView只是顯示一片空白,而沒(méi)有正常加載所需要的內(nèi)容...
    wangmf閱讀 6,356評(píng)論 3 2

友情鏈接更多精彩內(nèi)容