簡體   English   中英

統一原型和JQuery的$函數

[英]Unify $ function of Prototype and JQuery

是否有可以將$函數與Prototype和jQuery統一的JavaScript函數?

是的,這是我現在面臨的真正用例。 我發現Prototype中的$函數和jQuery中的$相互沖突。 我知道我們可以使用jQuery.noConflict()將$重新分配給Prototype,但是,這樣做,我將不得不重寫使用該$函數的特定於jquery的javacript代碼,或者在代碼塊中具有特定於jquery的代碼(例如。匿名功能)。

有沒有更簡單的方法,而不必重寫兩個庫中的現有代碼並將它們放在一頁中?

可以回答這個問題的代碼可能如下所示,非常感謝您的反饋:

<script type="text/javascript" src="/path/to/prototype.js"></script>
<script type="text/javascript" src="/path/to/jquery.js"></script>
<script type="text/javascript">
/* <![CDATA[ */
var $j = jQuery.noConflict();
var $p = $; // reference to prototype's $
var $ = function(E, F){
  var isJQuery = true;

  //TODO: logic to determine which $ to use here YOUR SUGGESTION HERE ;-)

  var result = null;
  if(isJQuery){
    result = $j(E, F);
  } else { // prototype
    //TODO: code to delegate prototype $
  }

  return result;
}
/* ]]>*/
</script>

// ... any existing javacode jQuery and Prototype using $ function. 

謝謝。

更新 :更清楚地重寫問題。

好吧,首先,我很少能找到有用的情況,其中兩個庫都必須包含在同一頁面中。 因此,您可以考慮刪除一個。
我猜這是由於使用插件引起的,但是請看一下對手的插件列表,我很確定還有替代方法。

其次,對於您的jQuery特定代碼,使用匿名函數技巧很容易將其重寫:

(function($){
  ... your code here ...
})(jQuery);

在您不放置全局變量或方法而不是將它們綁定到事件的大多數情況下,這將起作用。

我總是養成將所有jQuery代碼放入函數中的習慣,類似於gizmo的示例:

jQuery(function($) {
    // jQuery code here, using $
});

這與document.ready事件處理程序相同。

jQuery非常適合確保它們與Prototype兼容。 請查看此頁面以獲取詳細信息, 避免與其他庫沖突

我之前看過兩個庫都在同一頁面中使用,這通常是由於頁面中的第三方應用程序使用一個庫,而頁面使用另一個庫。 但是,如果您自己進行所有開發,則建議您堅持一個或另一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM