2012-02-13 83 views
0

我努力理解在這種情況下使用noConflict有道有道:使用jQuery noConflict

  • 我的代碼加載一個網頁上的小工具,我不控制
  • 這網頁可以使用已經包含了jQuery和/或其他庫比如Prototype $
  • 我的窗口小部件需要自己的jQuery的版本(這是我想要加載任何已經加載的頁面上)

到目前爲止,我小工具ks,但是在加載之後,原始網頁被破壞,因爲$指向我自己版本的jQuery。

感謝您的幫助!

+0

有什麼問題的代碼?你目前的問題太含糊,所以不能在沒有更多細節的情況下回答。 – 2012-02-13 17:25:22

+0

你自己的JQuery版本是什麼意思?在頁面中加載JQuery庫兩次將不起作用。當兩個不同的JS庫加載時(例如JQuery和Mootools),將使用JQuery noConflict。爲了確保您使用的是JQuery庫,您可以通過noConflict()來訪問它。 – Imraan 2012-02-13 17:30:41

+1

@Imraan:你可以加載2個不同版本的jQuery。'noConflict'返回jQuery對象,所以你可以將它分配給另一個變量。 – 2012-02-13 17:54:58

回答

3

$.noConflict()$重置爲jQuery加載前的狀態。

<script type="text/javascript" src="other_lib.js"></script> 
<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript"> 
    $.noConflict(); 
    // Code that uses other library's $ can follow here. 
</script> 

它也可以用來命名的jQuery別的東西(因爲它重置$變量後返回的jQuery)。

<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript"> 
    $jq = $.noConflict(); 
    // jQuery is now `$jq` instead of `$` 
</script> 

所以你可以做的是使用$作爲當前jQuery和$jq爲您的版本。

<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript" src="your_jquery.js"></script> 
<script type="text/javascript"> 
    $jq = $.noConflict(); 
    // Your jQuery is `$jq`, and the original jQuery is `$` 
</script> 

DEMO:http://jsbin.com/axoxez/edit#javascript,html,live

+0

謝謝,很好的回答! – Blacksad 2012-02-13 18:17:48

+0

不客氣。很高興我能幫上忙。 :-) – 2012-02-13 18:20:02

0

嘗試在「您的jQuery版本」加載後立即運行此代碼。

$.noConflict(); 

如果你已經過書面映射到$以前的圖書館,它不會幫助。但是如果你知道以前的庫是什麼(並且它不是jQuery),那麼你可以使用類似$ = MooTools的東西將它重新映射到$

整個代碼會讀...

$.noConflict(); // leaves jQuery available using jQuery() 
$ = MooTools; // maps the original library (MooTools in this example) back to $ 
0

jQuery.noConflict存在過度使用$變量的刪除與其他JavaScript庫衝突。它不會幫助你與jQuery版本衝突。使用它的正確方法是增加一個script標籤像這樣,加載的jQuery的script標籤後:

<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript"> 
    jQuery.noConflict(); 
</script> 

想必你的小部件不會是能夠做到這一點(你的問題說,它不無法控制網頁),這意味着您必須將此行爲記錄爲您窗口小部件的要求。換句話說,你的widget的用戶將不得不爲你調用jQuery.noConflict。