【问题标题】:how to namespace jquery to be used throughout my site如何命名 jquery 以在我的整个站点中使用
【发布时间】: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


【解决方案1】:

您可以将jQuery.noConflictIIFE 一起使用

var myNameSpace = jQuery.noConflict();

   (function(myNameSpace) {

      //Use your namespace
      myNameSpace('body').css('background-color', '#ff0000');

   })(myNameSpace)

【讨论】:

  • 说我包括 myNameSpace.getScript("/js/events.js");在 IIFE 中..我如何在该文件中使用 myNameSpace 而不是 $..这是我关心的问题
【解决方案2】:

这是可能的,但您必须对 jQuery 源代码进行一些编辑。

/*!
 * jQuery library
 */

( function( global, factory ) {
  ...
})(window);

var myNamespace = myNamespace || {};
myNamespace.$ = myNamespace.jQuery = jQuery.noConflict(true);

这应该会在您自己的命名空间下为您提供jquery 函数或$ 快捷方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 2019-03-14
    • 1970-01-01
    • 2022-01-27
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    相关资源
    最近更新 更多