2011-07-19 72 views
49

第一個代碼段不起作用。不過,它開始工作時,$(美元符號)與jQuery(請參閱第二個片段)全部替換。但我真的不明白爲什麼?任何人都可以向我解釋這個嗎?非常感謝!

1日摘錄

jQuery.noConflict(); 
       $(document).ready(function(){  
        $("#insideTable > tbody > tr:odd").addClass("odd"); 
        $("#insideTable > tbody > tr:not(.odd)").hide(); 
        $("#insideTable > tbody > tr:odd").show(); 
        $("#insideTable > tbody > tr.odd").click(function(){ 
         $(this).next().toggle(); 
         $(this).find(".arrow").toggleClass("up"); 
        }); 

       }); 

第二個片段

 jQuery.noConflict(); 
     jQuery(document).ready(function(){ 

       jQuery("#insideTable > tbody > tr:odd").addClass("odd"); 
       jQuery("#insideTable > tbody > tr:not(.odd)").hide(); 
       jQuery("#insideTable > tbody > tr:odd").show(); 
       jQuery("#insideTable > tbody > tr.odd").click(function(){ 
        jQuery(this).next().toggle(); 
        jQuery(this).find(".arrow").toggleClass("up"); 
       }); 

      }); 

回答

91

這是因爲jQuery.noConflict()被使用jQuery相關的 「釋放」 的 「$」。通常在你的代碼中,你可以使用$作爲「jQuery」的替代品。如果你使用noConflict()你不能再這麼做了,所以你必須用「jQuery」替換每個「$」。 。

許多JavaScript庫使用$作爲函數或變量名稱,只是像jQuery那樣使用 。在jQuery的情況下,$是jQuery的別名,所以 所有功能都可以在不使用$的情況下使用。如果我們需要使用 另一個JavaScript庫jQuery的旁邊,我們可以返回 $再換另一庫控制與以$ .noConflict()的調用:

你也可以創建一個完全新的別名使用

var myJqueryAlias = jQuery.noConflict(); 
myJqueryAlias(document).ready(function(){ 

     myJqueryAlias("#insideTable > tbody > tr:odd").addClass("odd"); 
     myJqueryAlias("#insideTable > tbody > tr:not(.odd)").hide(); 
     myJqueryAlias("#insideTable > tbody > tr:odd").show(); 
     myJqueryAlias("#insideTable > tbody > tr.odd").click(function(){ 
      myJqueryAlias(this).next().toggle(); 
      myJqueryAlias(this).find(".arrow").toggleClass("up"); 
     }); 

    }); 
+0

這就是答案! – trusktr

+14

這是有效的,只是想指出傳遞給'ready'回調函數的第一個參數是jQuery對象,所以你可以在函數中使用'.ready(function($){'''),然後使用'''作爲只要你不需要使用外部$的東西。 – loganfsmyth

10

調用noConflict()將刪除$和jQuery函數之間的關聯。這樣可以使用另一個JavaScript庫,它也可以縮短到$而不會發生衝突。