jQuery 只允许一个版本

Posted

技术标签:

【中文标题】jQuery 只允许一个版本【英文标题】:jQuery only allow one version 【发布时间】:2011-06-07 22:08:19 【问题描述】:

我有一个包含 jquery 的第三方脚本(这会导致事情中断)。我使用的是 1.6 版本,而外部脚本使用的是旧版本。

如何强制只加载一个版本的 jquery,它是我在页面上的版本而不是外部加载的版本?

【问题讨论】:

通常,仅在插件之后包含您的版本将覆盖他们对全局命名空间所做的任何更改,包括jQuery$ 好吧,我不知道在旧版本中使用新版本的 jQuery 是否安全,因为使用 jQuery 1.6 可能会破坏第三方脚本中的内容。可以加载两个版本还是只需要 1.6? 我只想要 1.6。我只需要测试它不会破坏第三方 js。 有人建议对我的脚本使用 $$ 以确保没有冲突,但仍然有两个负载(更慢,但可能更健壮) 是的,这就是我推荐的。一般来说,更新 jQuery 很好,但我看到了一些奇怪的错误。阻止脚本加载旧版本 jquery 的唯一方法是修补第三方源代码。 【参考方案1】:

这实际上很容易做到,使用 jquery.noConfict();

<script src='jquery-1.6.js'></script>
<script>
var jq16 = jQuery.noConflict();
</script>
<script src='jquery-1.4.2.js'></script>
<script>
var jq142 = jQuery.noConflict();
</script>

然后你可以让函数像这样使用 $() 命名空间:

 (function($) 
$('<button>Use jQuery 1.4.2</button>')
    .click(function() 
        alert('Top: ' + $(this).offset().top + '\n' +
            'jQuery: ' + $.fn.jquery);
    )
    .appendTo('body');
)(jq142);

this page 上有一个更详细的示例和一些额外提示。

【讨论】:

【参考方案2】:

改用.noConflict()?例如: 我在 html 文档中的 &lt;head&gt; 中有这个:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>
<script type="text/javascript">
jQuery.noConflict()
jQuery16 = jQuery
</script>

在我的 jQ 脚本中,我将其称为:

jQuery16(document).ready(function($)


$('.textarea').text(' Hello World! ');



);

这样做我确信我的脚本不会干扰使用其他/旧版本 jQuery 的外部。

【讨论】:

以上是关于jQuery 只允许一个版本的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 拖放 - 只允许从浏览器外部拖动

如何使用 jQuery 在 HTML 输入框中只允许数字空间和分数(1 1/2)格式?

什么是 Jquery 的 $.getJSON 的香草 JS 版本

AJAX(jQuery)到 PHP,“Access-Control-Allow-Origin”标头包含多个值“<domain>,*”,但只允许一个 [重复]

多个版本的 jQuery [重复]

jQuery noConflict() 方法