我正在开发一个新的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>