在自定义库中包含JQuery.如何解决冲突问题



我正在开发一个新的JS库。我想把JQuery作为它的核心部分。

我的库应该可以在所有类型的网站上工作,所以在这些网站中,JQuery可能已经包含在不同的版本中,可能有一些其他的库可能与我的库中的JQuery冲突。

jQuery.noConflict();  

可能不是一个完整的解决方案,因为它将从全局作用域中删除变量。我的库不想更改用户的任何其他设置。

那么我怎样才能避免这些问题

    ($ alias -可能是jQuery.noConflict();).
  • 与其他版本的JQuery冲突,如果它已经包含在网页中

提前感谢。请不要告诉不包含JQuery,使用正常的JS:)

这很简单。

首先加载你喜欢的jQuery,并通过使用

从已经存在的jQuery中省略任何冲突来获得一个句柄,
    $yourJQ = window.jQuery.noConflict(true);

在所有你想使用jQuery的函数中使用匿名作用域$yourJQ。像这样,

   (function($){
     // external library code   
    })($yourJQ);

希望有帮助

也可访问http://alexmarandon.com/articles/web_widget_jquery/

无论你是否从全局作用域中删除变量,你都必须执行find &replace更改库指向jQuery的哪个版本;因为他们要么使用$,要么使用jQuery &总之是全局范围内的冲突。您可以尝试这样做:

加载jQuery的第一个版本

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.js"></script>
<script type="text/javascript">
  jQuery.noConflict();
  (function(window,$) {
    window.jQuery_v1 = $;
  })(window,jQuery);
  delete jQuery;
</script>

加载jQuery第二版

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.js"></script>
<script type="text/javascript">
  jQuery.noConflict();
  (function(window,$) {
    window.jQuery_v2 = $;
  })(window,jQuery);
  delete jQuery;
</script>
使用两个版本的jQuery
<script type="text/javascript">
  // this is now one version of jQuery
  console.log(jQuery_v1);
  // this is now another version of jQuery
  console.log(jQuery_v2);
</script>

最新更新