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