正确使用jQuery noConflict的方法

时间:2012-02-13 17:22:56

标签: jquery

我正在努力理解在这种情况下使用noConflict的正确方法:

  • 我的代码是在我无法控制的网页上加载的小部件
  • 此网页可能已包含jQuery和/或其他库,例如使用$
  • 的Prototype
  • 我的小部件需要自己的jQuery版本(我想加载已经加载到页面上的任何内容)

到目前为止我的小部件工作,但在加载后,原始网页被破坏,因为$指向我自己的jQuery版本。

感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

$.noConflict()$重置为加载jQuery之前的任何内容。

<script type="text/javascript" src="other_lib.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
  $.noConflict();
  // Code that uses other library's $ can follow here.
</script>

它也可以用来命名jQuery别的东西(因为它在重置$变量后返回jQuery)。

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
  $jq = $.noConflict();
  // jQuery is now `$jq` instead of `$`
</script>

所以你可以做的是使用$作为当前的jQuery,$jq作为你的版本。

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="your_jquery.js"></script>
<script type="text/javascript">
  $jq = $.noConflict();
  // Your jQuery is `$jq`, and the original jQuery is `$`
</script>

DEMO:http://jsbin.com/axoxez/edit#javascript,html,live

答案 1 :(得分:0)

尝试在加载“你的jQuery版本”后立即运行此代码。

$.noConflict();

如果您已经覆盖了映射到$的先前库,那么它将无济于事。但是如果您知道以前的库是什么(并且它不是jQuery),您可以使用类似$的内容将其重新映射到$ = MooTools

整个代码会读......

$.noConflict(); // leaves jQuery available using jQuery()
$ = MooTools; // maps the original library (MooTools in this example) back to $

答案 2 :(得分:0)

jQuery.noConflict用于在使用$变量时删除与其他JavaScript库的冲突。它不会帮助你解决jQuery版本冲突。使用它的正确方法是在加载jQuery的script标记后添加script标记,如下所示:

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
  jQuery.noConflict();
</script>

据推测,您的窗口小部件无法做到这一点(您的问题表明它无法控制网页),这意味着您必须将此行为记录为窗口小部件的要求。换句话说,您的小部件的用户将不得不为您调用jQuery.noConflict。