Jquery插件占用相同的函数名 – >冲突
我使用jquery expose插件和Masked Input插件遇到了问题。 问题是它们都占用$.mask
函数,导致冲突。 但我非常需要这两个插件一起工作。 我会在其中一个中将$.mask
重命名$.mask
…让我们说, $.msk
,但在这种情况下我总是需要记住它,如果我想升级到新版本,我会再次重命名。
寻找更好的解决方案,以解决如何处理jquery插件之间的这种冲突。
我想我同意穆的回答。 一个补充可能是使用jQuery.sub() 。
由于大多数插件在构造期间使用jQuery全局,因此您应该能够在加载其中一个插件之前对jQuery进行别名。 然后,您可以随后重新别名为您选择的任何内容。
这种方法唯一可能的优点是它可能将一个插件与另一个插件可能对jQuery方法所做的更改隔离开来。 它有点令人费解,但是我能想到的唯一替代改变插件的方法。
我认为你可以选择需要你记住某些东西的解决方案,问题是你多久想要记住一次。
如果您重命名其中一个,那么您必须记住修补任何升级。 我不认为这是一个大问题,它一直在软件开发中发生。
另一种方法是拉入其中一个插件,然后立即加载一个名称空间修补程序,例如, jQuery.fn.masked_input = jQuery.fn.mask;
然后可以在此之后加载公开插件。 只要重命名的插件在任何地方都没有引用自己的名称,这种方法就可以工作。 而且,您必须记住插件的特定加载顺序。 这种事情也一直在软件开发中发生。
好。 我现在正在回答我的问题。
我认为mu太短了 ,但它并不合适。 我的同事提供了以下内容:
我们像这样创建jQuery的新实例:
var $$$ = $.extend( true, function(selector, context) { return new $$$.fn.init( selector, context ); }, $); $$$.fn = $$$.prototype = jQuery.prototype;
我们在其上创建$
function的插件闭包(因为$
在插件中使用):
(function($) { ... plugin code goes here ... $.fn.extend({ myplugin: function(maybe_some_options) { ... })($$$);
现在我们可以调用$$$(
和$(
同时。
到目前为止,我们对这种方法没有任何问题,我也没有看到它会破坏的原因,所以我们决定采用这个决定。