2

问题是如果你想在页面上使用 otherLibrary,$ 必须是 otherLibrary 的 $,而不是 jQuery 的。由于 $ 无论如何只是 jQuery 的别名,jQuery 提供了 noConflict 函数作为告诉 jQuery 将 $ 控制权返回给在 jQuery 加载之前拥有它的任何东西的方法。

我在另一个问题上读到了这个。我正在对当前使用无法更新的 jQuery 1.3.2 和其他库的站点进行更改。它目前使用 noConflict ,因此必须使用jQuery. $我需要运行新版本的 jQuery 以添加添加到页面中。

如何调用第二个 jQuery 库并使用 noConflict 将新别名关联到它?所以这jQuery适用于 1.3.2,新别名适用于第二个 jQuery,而 $ 适用于其他一切?

4

1 回答 1

3

引用 api 中的示例,添加插件:

<!DOCTYPE html>
<html>
<head>
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
  <script src="jquery.superautocomplete.js"></script> <!-- this uses 1.9.1 -->
</head>
<body>

<div id="log">
  <h3>Before $.noConflict(true)</h3>
</div>
<script src="http://code.jquery.com/jquery-1.3.2.js"></script>
<script src="jquery.fancybox.js"></script> <!-- this uses 1.3.2 -->

<script>
/*
Restore globally scoped jQuery variables to the first version loaded
(the newer version)
*/
jq132 = jQuery.noConflict(true);
jq132("[rel=fancybox]").fancybox(); // using 1.3.2
$("#autocomplete").superautocomplete(); // using 1.9.1
</script>

</body>
</html>

这是当您调用无冲突时 jQuery 内部发生的事情的一个极其简化的版本。

// including first version of jQuery:
window._foo = window.foo; // undefined
window.foo = "1.9.1"; // 1.9.1

// including second version of jQuery:
window._foo = window.foo; // 1.9.1
window.foo = "1.3.2"; // 1.3.2

// now when you do noConflict, this happens:
function noConflict() {
    var ret = window.foo; // 1.3.2
    window.foo = window._foo; // 1.9.1
    return ret; // 1.3.2
}

foo132 = noConflict(); // 1.3.2
alert(foo132); //1.3.2
alert( foo ); // 1.9.1
于 2013-05-22T19:07:02.133 回答