我正在开发一个javascript模块,我希望它是独立的。我还想使用jQuery提供的跨浏览器功能。如何在我的模块中包含jQuery而不与潜在的用户包含的jQuery冲突?
是否有一般方法可以执行此操作,以便我可以将其他库添加到项目中而不会与全局命名空间冲突?
答案 0 :(得分:1)
我会尝试将所有jQuery复制到您的JS文件和running it in "no conflict" mode中。然后,如果将整个JS文件包装在不带参数的immediately invoked function expression中,则$
变量不会干扰全局范围。
因此,您的文件看起来像:
(function () {
// all of jQuery goes here
$.noConflict();
var $ = jQuery.noConflict();
// your code that uses $ here
})();
在IIFE中包装所有内容会使您的$
变量保持在本地,因此文件外的任何代码都无法触及该变量。这可能有点极端,但它应该有效。
您实际想要做的只是确保您的jQuery版本包含在您的用户之前。然后在您的代码中,运行var myJQ = jQuery.noConflict();
并使用myJQ
代替代码中的$
或jQuery
。 See this example.