Prototype.js与jquery插件冲突

时间:2014-06-17 13:07:37

标签: jquery prototypejs selectize.js

我的应用程序已经使用了prototype.js一段时间了。我现在正在尝试使用jQuery和jquery插件来实现一些增强功能。但是,prototype.js和jQuery会因使用' $'而产生冲突。变量。这可以通过jQuery提供的noConflict()方法来解决,因此我可以将jQuery快捷方式更改为我想要的。问题是如何使用我想导入的jQuery插件。当然,有一个更好的方法,而不是找到并替换所有的' $'变量

正在使用的插件是“Selectize' https://github.com/brianreavis/selectize.js

2 个答案:

答案 0 :(得分:3)

您已将问题编辑为:

  

正在使用的插件是'Selectize'https://github.com/brianreavis/selectize.js

该插件根本不依赖于全局$符号;没有什么需要做的,以使插件与使用$用于其他东西的网站(例如Prototype)兼容。该插件仅依赖于jQuery符号。 (它在内部使用$,但仅作为局部变量;它不使用全局。)任何正确编写的jQuery插件都会避免使用全局$,因为这个问题。

要在您的网站上使用它,您可以执行以下操作:

<script src="/path/to/prototype.js"></script>
<script src="/path/to/jquery.js"></script>
<script src="/path/to/your/code.js></script>

...您的代码可能如下所示:

(function() {
    var $j = jQuery.noConflict();
    $j("some-selector").pluginMethod();  // jQuery
    $("some-id").addClassName("foo");    // Prototype
})();

(你不需要那里的包装函数,只是为了避免创建一个$j全局)。

或者只是:

jQuery.noConflict();
jQuery("some-selector").pluginMethod();  // jQuery
$("some-id").addClassName("foo");        // Prototype

答案 1 :(得分:0)

我认为T.J. Crowder有一个很好的答案,但作为一种替代方案,如果您需要在整个项目中管理冲突等。您可能希望考虑requirejs。

我不会详细了解requirejs,因为可以在网站上找到足够的内容。

RequireJS是一个模块加载器,可以帮助管理这样的问题,并具有帮助处理不符合asynchronous module pattern的javascript的功能。

这是一篇讨论它与jQuery和插件一起使用的文章。 http://requirejs.org/docs/jquery.html