我正在使用两个 jquery 插件。两者都使用原型(prototype)函数 removeTag
扩展了 jquery。这会导致第二个加载的插件正常工作,而第一个加载的插件则无法正常工作。
作为一个快速补丁,我将第二个插件上的removeTag - 以及对它的所有调用 - 重命名为其他内容。
显然,这不是一个好的解决方案。升级需要手动编辑,并且可能存在我尚未意识到的其他命名空间冲突。
有人可以推荐一些有效的策略来处理这个问题吗?
我使用的两个插件是:
- jQuery TagIt - http://aehlke.github.com/tag-it/
- jQuery 标签输入 - https://github.com/xoxco/jQuery-Tags-Input
最佳答案
您可以使用下面的代码添加一个js文件:
if (jQuery) {
jQuery.namespace = function(namespace) {
var names = namespace.split(".");
var parent = window;
for (var index = 0; index < names.length; index++) {
if (!parent[names[index]]) {
parent[names[index]] = function() {
throw "Namespace, Cannot instantiate";
}
}
parent = parent[names[index]];
}
}
}
在您的脚本中,您可以像下面这样使用它:
$.namespace("Somejs.MyCustomjs");
稍后的代码引用完整的命名空间,例如:
SomeJs.MyCustomjs.myFunc();
希望有帮助
编辑:我忘了提及,在 js 类的声明中,您使用了完整的命名空间
关于jquery - 处理 jquery 命名空间冲突的好/最好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10557873/