【发布时间】:2016-12-14 23:19:17
【问题描述】:
在下面的脚本中,我首先使用 javascript 动态加载 jquery。加载后,我想命名 jquery 的 $ 以便我可以在整个站点中使用另一个名称。例如,我不想打电话给$('body').,而是打电话给MYNAMESPACE('body')。但我无法正确完成命名空间。请在这方面帮助我。谢谢..
(function () {
function loadScript(url, callback) {
var script = document.createElement("script")
script.type = "text/javascript";
if (script.readyState) { //IE
script.onreadystatechange = function () {
if (script.readyState == "loaded" || script.readyState == "complete") {
script.onreadystatechange = null;
callback();
}
};
} else { //Others
script.onload = function () {
callback();
};
}
script.src = url;
document.getElementsByTagName("head")[0].appendChild(script);
}
loadScript("/plugins/system/conversekit/js/jquery.js", function () {
//jQuery loaded
alert('jquery loaded');
var cKit = (function($){
var loadScripts = function(){
var jq = $.noConflict();
return jq;
}
return {
ConversekitJs : loadScripts// I expect this to return namespaced jquery
};
}
})(jQuery);
var js = cKit.ConversekitJs(); //function call
//so that I may use jq instead of $ or jQuery
js('body').css('background-color', '#ff0000');
});
})();
根据 R.J 建议的答案进行编辑:
var myNameSpace = jQuery.noConflict();
(function(myNameSpace) {
//Use your namespace
myNameSpace('body').css('background-color', '#ff0000');//works
myNameSpace.getScript("/js/events.js");//in this file myNameSpace has no effect..
})(myNameSpace)
在 events.js 中
myNameSpace('body').css('background-color', '#ff0000');//doesn't work
但如果我在页面顶部添加 var myNameSpace = jQuery.noConflict(); 它将起作用..这是我想要避免的。我不想在每个页面中声明它,而是想在顶层定义一次。
【问题讨论】:
-
什么是 ConversekitJs?
-
我给的命名空间......但它做错了......请更正它
-
你不能从回调中返回 cKit
-
请分享
events.js中试图访问命名空间的脚本 -
在 events.js 中这是我正在做的事情... myNameSpace('body').css('background-color', '#ff0000');
标签: javascript jquery namespaces