0

好吧,有这么多方法,但是,我只对1感兴趣,但是使用哪种方法呢?不知道...

基本上,这是两难的。在页面正文中将会有对 jQuery 的后续调用。它需要知道之前是否已经定义了 jQuery,如果是,则不要重新加载它,但如果没有,则加载 jQuery。现在,除此之外,我不需要运行任何 jQuery 代码,直到 jQuery 确实被定义。

这是我一直在使用的,但它是有缺陷的,因为我在 Google Chrome 中的后续调用中遇到错误(声明未定义 jQuery)

这是我的代码:

if(!window.jQuery)
{
   var script = document.createElement("script");
   script.type = "text/javascript";
   script.async = false;
   script.src = "//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js";
   var oScripts = document.getElementsByTagName("script");
   var s = oScripts[0];

   s.parentNode.insertBefore(script, s);
}

function dpmodPollBgColor()
{
    jQuery(document).ready(function($){
    // Uncaught ReferenceError: jQuery is not defined
        $.cssHooks.backgroundColor = {
            get: function(elem) {
                if (elem.currentStyle)
                    var bg = elem.currentStyle["backgroundColor"];
                else if (window.getComputedStyle)
                    var bg = document.defaultView.getComputedStyle(elem,
                        null).getPropertyValue("background-color");
                if (bg.search("rgb") == -1)
                    return bg;
                else {
                    bg = bg.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
                    function hex(x) {
                        return ("0" + parseInt(x).toString(16)).slice(-2);
                    }
                    return "#" + hex(bg[1]) + hex(bg[2]) + hex(bg[3]);
                }
            }
        }

        $(".bar-container").each(function() {
            if($(this).children(":first").css("width") != "0px")
            {
                var hexColor = $(this).children(":first").css("background-color");
                var bgColor = shadeColor(hexColor, 50);
                $(this).css({"background-color": bgColor});
            }
        });
    });
}

if (document.addEventListener)
    window.addEventListener("DOMContentLoaded", dpmodPollBgColor, false);
else
    addLoadEvent(dpmodPollBgColor);

我不想使用onReadyStateChange,因为我不希望它干扰(可能是)同一页面上的其他 AJAX 调用。

基本上,我需要一种方法来保证 1. 如果没有加载 jQuery,它将加载它。2. jQuery 真正加载完成后,才会执行 jQuery 里面的功能。3. 它不会干扰页面上的任何其他 jQuery 代码,无论为 jQuery 定义什么变量。例如,如果其他一些代码将 jQuery 定义为usin, 而不是默认的$.

我发现自己很难让多个 jQuery 实例相互协调工作。

我现在使用的方法是这样的:

  1. 如果未通过该语句加载,请使用定义 jQuery 的 ifif(!window.jQuery)语句。

  2. 定义一个函数,并将所有 jQuery 包装在这个函数中:

    函数 FunctionName() { jQuery(document).ready(function($){

    // 这里所有的 jQuery 代码;

    }); }

  3. 尝试加载函数 onLoad,window.addEventListener如果可能,使用,否则调用内置函数AddLoadEvent()

不知何故,实现中存在缺陷,但逻辑对我来说似乎是正确的。我将如何在 Google Chrome 中使用不同函数名称的相同代码的多个实例进行此操作?在所有其他浏览器中似乎都很好,除了谷歌浏览器。

谢谢

4

1 回答 1

-2

你有严重的错误。这里有一些:

我现在使用的方法是这样的:如果没有通过 if(!window.jQuery) 语句加载,则使用定义 jQuery 的 if 语句。

当然它会给你一个错误,因为 JQuery 对象不存在。当您还没有偶数 JQuery 文件时,您尝试使用 JQuery 对象。

if(!window.jQuery)//requesting JQuery object but..
{
   var script = document.createElement("script");
   script.type = "text/javascript";
   script.async = false;
   script.src = "//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js";//here is when you are loading its file.
   var oScripts = document.getElementsByTagName("script");
   var s = oScripts[0];

   s.parentNode.insertBefore(script, s);
}


****Define a function, and wrap all jQuery inside of this function:**

    function FunctionName() { jQuery(document).ready(function($){

    }); }*

*

地球上的某个人会为了什么而将函数包装在.ready()函数中?.ready()函数是为其名称所代表的:当文档准备好不将其放入函数中时。

于 2013-05-17T18:50:02.683 回答