不同的 jQuery 版本冲突怎么解决? 下面本篇文章给大家介绍一下. 有一定的参考价值, 有需要的朋友可以参考一下, 希望对大家有所帮助.
用过 jQuery 的朋友都知道 jQuery 不同版本会引发冲突, 本文就此问题提出有效的解决方案如下:
案例: 解决 jQuery1.3.2 和 1.4.2 的冲突.(本例已测试通过!)
第一步: 在 1.4.2 的源代码的最后加上一句 :
var $j4 = jQuery.noConflict(true);
之所以在源码这里加, 而不是像大多数文章提的在要用到的时候加, 这是因为很多基于 1.4.2 的插件都要加, 在这里加可以避免过多插件加这句代码导致重复. 这一句是将 1.4.2 的 jQuery 和 $ 的引用权限全部放弃. 也就是基于 1.4.2 的插件不能再用 jQuery 和 $ 了. 同时给予 $j4 的新的命名空间, 注意它是 Windows 的属性. 看 1.4.2 的源代码会发现它其实也就执行了这两句:
- Windows.$=_$;
- Windows.jQuery=_jQuery;
道理同 Windows.$=_temp$(返还命名空间)只是命名不同而已.
第二步: 在基于 1.4.2 的框架的所有插件的头部加上以下代码:
var _temp$ = Windows.$,_tempjQuery = Windows.jQuery;
将 jQuery1.3.2 的 $ 和 jQuery 放到临时的变量空间上:
Windows.$ = $j4;
这句和下面的那句都是为了给中间的代码能够正确使用 jQuery 和 $ 用的. 后面的 $j4 是赋予他们正确的引用.
Windows.jQuery = $j4;
之所以要先放临时变量存储, 有三点必须这样做的理由:
1. 我们不希望改动大量的 jQuery 插件源代码, 最好是不动, 即使改的话, 尽量改的少. 而在头部尾部加改动代码, 中间的原始代码不动也是不错的一种方式.
2. 因为 1.4.2 的已经放弃了 jQuery 和 $ 的控制权, 但是已有的插件代码又用了他们来做引用, 因为插件不可能预知冲突, 即使有冲突他人开发的插件也一定要用 $ 或者 jQuery 引用, 除非它不是 jQuery 下的插件.
3. 为了防止插件里面直接用 Windows.$ 和 Windows.jQuery 进行引用从而导致引用到 1.3.2 的 jQuery 和 $, 虽然这种情况比较少, 但是以防万一.
中间的原始代码不动, 尾部加以下代码:
- Windows.$ = _temp$;// 将 $ 的引用权限返还给 jQuery1.3.
- Windows.jQuery = _tempjQuery;// 将 jQuery 的引用权限返还给 jQuery1.3.
第三步: 以后要用基于 jQuery1.4.2 的选取函数就只能用 $j4(element)了.
总结: 到目前为止可行方案: jQuery1.4.2 完全放弃 $ 和 jQuery 的控制权限. 1.3.2 放弃 $ 的控制权限但不放弃 jQuery 的权限, 其实 jQuery 也可放弃, 只不过要给个别名 $j3.prototype 最好放在 jQuery1.3.2 后面, 它获得 $ 的控制权限. 只是以后要用 jQuery1.4.2 就必须用 $j4 来引用了. 但这样即使有再多的 jQuery 框架版本冲突问题, 也全部解决掉了. 假如来了个 1.2 的 jQuery 怎么办, 参照 (2) 的执行步骤, 只不过第一步改为:
var $j2 = jQuery.noConflict(true);
第三步用 $j2(element)罢了. 道理都是相同的.
更多前端开发 https://www.html.cn/ 知识, 请查阅 HTML 中文网 !!
来源: http://www.css88.com/qa/jquery/17141.html