Jquery插件使用相同的函数名->;冲突

Jquery插件使用相同的函数名->;冲突,jquery,jquery-plugins,namespaces,Jquery,Jquery Plugins,Namespaces,我在使用jquery expose插件和屏蔽输入插件时遇到了一个问题。 问题是它们都占用了$。掩码功能,从而导致冲突。但是我非常需要这两个插件一起工作。我将其中一个中的$.mask重命名为。。。比如说,$.msk,但在这种情况下,我需要始终记住它,如果我想升级到新版本,我将再次重命名 正在寻找更好的解决方案来处理jquery插件之间的此类冲突。我认为您可以在需要记住某些内容的解决方案之间进行选择,问题是您希望多久记住一次 如果您重命名其中一个,那么您必须记住修补任何升级。我不认为这有什么大不了的

我在使用jquery expose插件和屏蔽输入插件时遇到了一个问题。 问题是它们都占用了
$。掩码
功能,从而导致冲突。但是我非常需要这两个插件一起工作。我将其中一个中的
$.mask
重命名为。。。比如说,
$.msk
,但在这种情况下,我需要始终记住它,如果我想升级到新版本,我将再次重命名


正在寻找更好的解决方案来处理jquery插件之间的此类冲突。

我认为您可以在需要记住某些内容的解决方案之间进行选择,问题是您希望多久记住一次

如果您重命名其中一个,那么您必须记住修补任何升级。我不认为这有什么大不了的,它在软件开发中经常发生


另一种方法是引入一个插件,然后立即加载一个名称空间修补程序,该修补程序只需执行以下操作,例如,
jQuery.fn.masked\u input=jQuery.fn.mask
之后就可以加载expose插件了。只要重命名的插件不在任何地方引用自己的名称,这种方法就可以工作。而且,您必须记住插件的具体加载顺序。这种事情在软件开发中也经常发生。

好的。我现在回答我的问题

我认为mu的方法太短,但不太合适。我的同事提出以下建议:

我们创建jQuery的新实例,如下所示:

var $$$ = $.extend( true, function(selector, context) {
    return new $$$.fn.init( selector, context );
}, $);
$$$.fn = $$$.prototype = jQuery.prototype;
我们在其上创建
$
函数的插件闭包(因为
$
在插件内部使用):

现在我们可以调用
$$().myplugin({do:'great job',and'be happy'})
$().myplugin()
同时使用


到目前为止,我们对这种方法没有任何问题,我也不认为它会破裂的原因,所以我们决定继续这个决定。

我想我同意穆的答案。另外一个可能是使用

由于大多数插件在构建过程中使用jQuery全局,因此在加载其中一个插件之前,应该能够为jQuery添加别名。然后,您可以在以后将别名重新命名为您选择的任何名称

<script src="http://cdn.jquerytools.org/1.2.5/full/jquery.tools.min.js?foo"></script> 
<script type="text/javascript">
var jQuery = $.sub();
</script>
<script src="jquery.maskedinput.js" type="text/javascript"></script>
<script type="text/javascript">
var $$$ = jQuery;
jQuery = $;
</script>

var jQuery=$.sub();
var$$$=jQuery;
jQuery=$;

这种方法唯一可能的优点是,它可以将一个插件与另一个插件可能对jQuery方法所做的更改隔离开来。这有点复杂,但这是我能想到的改变插件的唯一选择。

谢谢您的回复。很抱歉,我不能接受你的回答,但至少应该投赞成票。恐怕你是对的——下次我想更新这个插件时,我必须从脑海中回忆起一些东西。这会起作用,但现在你的客户机内存中有两个jQuery副本,你必须记住(一直)使用哪个版本的jQuery来更新哪个插件。您让您的客户端在内存中付费,而不是遵循简单的升级过程和测试。最好不要覆盖init()方法,使用sub()会更好。您能让插件作者重命名该函数吗?这对你、他们和社区都有好处,我会尽力做到的。当我阅读关于创建jQuery插件的教程时,有人说开发人员应该尽量避免使用其他插件开发人员可能会使用的名称命名插件@SlavaGu我没有任何响应当您升级到jQueryV1.8时需要记住的一件事是,
jQuery.sub
在jQueryV1.7中已被弃用,并且在v1.8中不可用。
<script src="http://cdn.jquerytools.org/1.2.5/full/jquery.tools.min.js?foo"></script> 
<script type="text/javascript">
var jQuery = $.sub();
</script>
<script src="jquery.maskedinput.js" type="text/javascript"></script>
<script type="text/javascript">
var $$$ = jQuery;
jQuery = $;
</script>