jQuery,Prototype和插件之间的冲突

时间:2009-12-15 14:25:27

标签: jquery jquery-plugins prototypejs conflict

我试图在rails应用程序中消除Prototype和jQuery的冲突。我发现jQuery打破了Prototype进入应用程序的好方法。

我通过将$jq = jQuery.noConflict();添加到a​​pplication.js文件来启动该过程。

然后我开始浏览项目中的所有.erb和.js文件,查找对$的jQuery调用并将其替换为$jq。然后我得到了一些jQuery插件文件。

我是否必须在jQuery插件.js文件中将所有$引用转换为$jq

5 个答案:

答案 0 :(得分:2)

我今天遇到了这个问题并包装插件代码如:

(function($) {
  //plugin code
})(jQuery);
直到我在包含jQuery库文件的行之前移动包含原型库文件的行之前,

才起作用。

答案 1 :(得分:1)

您是否考虑将其添加到原型库js文件中?这样,无论什么时候加载原型,它都会自动解除对jquery的冲突。

我们在这里用mootools做了类似的事情。

在回答您的问题时,如果插件已正确写入,那么您不必在那里更改它。以下约定应该包装插件,确保即使打开noconflict也能正确操作。

;(function($) {

//plugin code

})(jQuery);

答案 2 :(得分:1)

或者你可以将它们包装在一个闭包中

(function($){

// add old jQuery code here.

})($jq);

答案 3 :(得分:1)

  

我是否必须在jQuery插件.js文件中将所有$引用转换为$ jq?

一般来说,没有。大多数插件都设置为以$ $形式传递jQuery对象。您可以判断插件是否执行此操作,因为它看起来像这样:

(function($) {

// Actual plugin code

})(jQuery);

答案 4 :(得分:0)

尝试按顺序将jQuery及其所有插件加载到一起,然后调用noConflict()。这是一个例子:

<script src="/path/to/1.3.1/jquery-1.3.1.min.js" type="text/javascript"></script>
<script src="/path/to/1.3.1/jquery-ui-1.6rc6.min.js" type="text/javascript"></script>
<script src="/path/to/jquery/plugin.js" type="text/javascript"></script>
<script type="text/javascript">
    var $jq = $jq || {};
    $jq.jQuery = jQuery.noConflict(true);
</script>

然后在您自己的代码中,您可以使用$ jq.jQuery变量引用jQ - 完成所需的插件。