我试图在rails应用程序中消除Prototype和jQuery的冲突。我发现jQuery打破了Prototype进入应用程序的好方法。
我通过将$jq = jQuery.noConflict();
添加到application.js文件来启动该过程。
然后我开始浏览项目中的所有.erb和.js文件,查找对$
的jQuery调用并将其替换为$jq
。然后我得到了一些jQuery插件文件。
我是否必须在jQuery插件.js文件中将所有$
引用转换为$jq
?
答案 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 - 完成所需的插件。