-1

Prototype と jQuery の両方から $ 関数を統合できる JavaScript 関数はありますか?

はい、これは私が今直面している実際の使用例です。Prototype の $ 関数と jQuery の $ が競合していることがわかります。jQuery.noConflict() を使用して $ を Prototype に戻すことができることはわかっていますが、そうすると、その $ 関数を使用する jquery 固有の javacript コードを書き直すか、コード ブロックに jquery 固有のものを含める必要があります (例:無名関数)。

両方のライブラリで既存のコードを書き直して、それらを 1 つのページにまとめなくても、簡単な方法はありますか?

この質問に答えることができるコードは次のようになります。フィードバックをお待ちしております。

<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. 

ありがとう。

update : 質問をより明確に書き直します。

4

3 に答える 3

6

まず第一に、両方のライブラリを同じページに含める必要がある便利なケースを見つけることはめったにありません。したがって、1つを削除することを検討してください。
これはプラグインの使用によるものだと思いますが、対戦相手のプラグインリストを見てみると、別の方法があると確信しています。

次に、jQuery固有のコードの場合、無名関数のトリックを使用してコードを書き直すのは非常に簡単です。

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

これは、グローバル変数またはメソッドをイベントにバインドするのではなく、配置しないほとんどの場合に機能します。

于 2009-04-20T05:40:38.527 に答える
2

gizmoの例のように、私は常にすべてのjQueryコードを関数に入れる習慣があります。

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

これは、document.readyイベントハンドラーと同じです。

于 2009-04-20T05:43:50.967 に答える
1

jQuery は、Prototype でうまく機能することを確認するのに優れています。詳細については、このページを確認してください。他のライブラリとの競合の回避.

以前に同じページで両方のライブラリが使用されているのを見たことがありますが、これは通常、ページにあるサードパーティのアプリが一方のライブラリを使用し、ページが他方のライブラリを使用しているためです。ただし、すべての開発を自分で行っている場合は、どちらか一方に固執することをお勧めします。

于 2009-04-20T13:41:20.477 に答える