0

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

我通过添加$jq = jQuery.noConflict();到 application.js 文件开始了这个过程。

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

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

4

5 回答 5

2

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

(function($) {
  //plugin code
})(jQuery);

直到我将包含原型库文件的行移到包含 jQuery 库文件的行之前才起作用。

于 2012-11-01T16:03:07.937 回答
1

有没有考虑将它添加到原型库 js 文件中?这样,每当加载原型时,它都会自动解除 jquery 的冲突。

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

在回答您的问题时,如果插件编写正确,那么您不必在那里进行更改。下面的约定应该包装插件,即使在没有冲突的情况下也能确保正确的操作。

;(function($) {

//plugin code

})(jQuery);
于 2009-12-15T14:28:37.370 回答
1

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

(function($){

// add old jQuery code here.

})($jq);
于 2009-12-15T14:32:21.357 回答
1

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

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

(function($) {

// Actual plugin code

})(jQuery);
于 2009-12-15T14:32:32.667 回答
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 —— 连同您想要的插件一起完成。

于 2009-12-15T16:31:58.807 回答