2012-02-13 88 views
0

我努力理解在这种情况下使用noConflict有道有道:使用jQuery noConflict

  • 我的代码加载一个网页上的小工具,我不控制
  • 这网页可以使用已经包含了jQuery和/或其他库比如Prototype $
  • 我的窗口小部件需要自己的jQuery的版本(这是我想要加载任何已经加载的页面上)

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

感谢您的帮助!

+0

有什么问题的代码?你目前的问题太含糊,所以不能在没有更多细节的情况下回答。 – 2012-02-13 17:25:22

+0

你自己的JQuery版本是什么意思?在页面中加载JQuery库两次将不起作用。当两个不同的JS库加载时(例如JQuery和Mootools),将使用JQuery noConflict。为了确保您使用的是JQuery库,您可以通过noConflict()来访问它。 – Imraan 2012-02-13 17:30:41

+1

@Imraan:你可以加载2个不同版本的jQuery。'noConflict'返回jQuery对象,所以你可以将它分配给另一个变量。 – 2012-02-13 17:54:58

回答

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

+0

谢谢,很好的回答! – Blacksad 2012-02-13 18:17:48

+0

不客气。很高兴我能帮上忙。 :-) – 2012-02-13 18:20:02

0

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

$.noConflict(); 

如果你已经过书面映射到$以前的图书馆,它不会帮助。但是如果你知道以前的库是什么(并且它不是jQuery),那么你可以使用类似$ = MooTools的东西将它重新映射到$

整个代码会读...

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

jQuery.noConflict存在过度使用$变量的删除与其他JavaScript库冲突。它不会帮助你与jQuery版本冲突。使用它的正确方法是增加一个script标签像这样,加载的jQuery的script标签后:

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

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