如何:在同一页面上有两个不同的jQuery - 要包含的页面包含最新的jQuery

时间:2011-02-07 22:23:33

标签: jquery

我有一个页面要包含在愿望的任何地方,并且该页面使用jQuery 1.4.4。 (我将使用官方jQuery图库来源中的“最新”,但......) 我无法控制的是用户网站jQuery库的版本。 或者即使用户拥有jQuery。

我已经做了一些测试,并将我的页面包含在具有OLDER jQuery的网站中 - 并且发生了冲突。

这是要包含的脚本的示例。我无法做到这一点:

.... php code ....

.... html head .....

    <script type="text/javascript">  var jQ144 = jQuery.noConflict(true);</script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
<script type="text/javascript">
jQ144(document).ready(function($){

    $(".helpPlease").hover(function(){      
        $(this).animate({height:'250px'}, { queue:false, duration:400 });
        },function(){       
        $(".helpPlease").animate({height:'17px'}, { queue:false, duration:400 });
    });

...(上面的代码只是例如)...更多代码........

});
</script>

它不起作用。

有没有办法检查页面是否已经有jQuery?如果更旧 - 激活更新的代码 - 我的页面的Jquery库? 或者......如何让新的'覆盖'旧的?

或者我做错了什么?我尝试了很多在网络上描述但没有结果的建议。

提前致谢! :)

1 个答案:

答案 0 :(得分:3)

当您包含jQuery时,它需要$变量并且创建jQuery类。 $恰好是对jQuery的引用。因此,当您包含较旧/不同版本的jQuery时,它实际上是“覆盖”(替换)jQuery类。

经测试,这可行:(删除noConflict调用中的true参数)

<html>
    <head>
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
        <script type="text/javascript">
            jQuery.noConflict(  )
            jQuery144 = jQuery
            console.log(jQuery144, jQuery)
        </script>
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
        <script type="text/javascript">
            jQuery144(function($) {
                console.log("hello", $.fn.jquery)
            })
            jQuery(function($) {
                console.log("world", $.fn.jquery)
            })
        </script>
    </head>
    <body>
    </body>
</html>

编辑2:您需要考虑一个重要问题。在内部,jQuery将自己称为window.jQuery。当您再次包含jQuery时,您正在重新定义window.jQuery,但是在第一个版本中进行的调用在运行时绑定,而不是在定义时间绑定,因此最旧的jQuery版本的某些内部调用可能实际上是在最新的一个。请注意。