-1

是否有任何 JavaScript 函数可以统一 Prototype 和 jQuery 中的 $ 函数?

是的,这是我现在面临的真正用例。我发现 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. 

谢谢。

更新:重写问题更清楚。

4

3 回答 3

6

好吧,首先,我很少能找到两个库必须包含在同一页面中的有用案例。所以你可能会考虑删除一个。
我猜这是因为使用了插件,但是看看对手的插件列表,我很确定还有一个替代品。

其次,对于您的 jQuery 特定代码,使用匿名函数技巧很容易重写它:

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

这适用于大多数不放置全局变量或方法而不是将它们绑定到事件的情况。

于 2009-04-20T05:40:38.527 回答
2

我一直养成将所有 jQuery 代码放入函数的习惯,类似于 gizmo 的示例:

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

这与 document.ready 事件处理程序相同。

于 2009-04-20T05:43:50.967 回答
1

jQuery 在确保它们与 Prototype 良好配合方面做得很好。查看此页面了解详细信息,避免与其他库发生冲突

我之前在同一个页面中看到过这两个库,这通常是因为您的页面中的第三方应用程序使用一个库,而您的页面使用另一个库。但是,如果您自己进行所有开发,我建议坚持使用其中一个。

于 2009-04-20T13:41:20.477 回答