IT技术博客大学习 共学习 共进步

jRaiser与jQuery的冲突问题

Heero's Blog 2010-07-18 08:42:45 累计浏览 3,342 次
本机暂存

最近有网友在留言板里问到jRaiser和jQuery的冲突问题,特此写一篇文章进行解释。

冲突的根源

众所周知,jQuery是通过一个全局变量$来引用的,而jRaiser加载时也占用了$。因而冲突的根源就是全局变量$。说得明白点:当jQuery和jRaiser共存的时候,$究竟是谁

分析jQuery和jRaiser的源代码可以知道,这两个库在加载的时候都会占用$变量。因此,按照覆盖的原理,谁后加载,$变量就是谁

如何解决冲突

别名法

除了$,jQuery和jRaiser都占用了另外一个变量作为别名,这个别名就是库本身的名称。

jQuery("div"); // 使用jQuery
jRaiser("div"); // 使用jRaiser

使用别名的主要问题是输入不方便:“$”只有一个字符,而“jQuery”有六个字符。但这个问题可以通过闭包解决:

(function($) {
// 此函数内的$是jQuery
$("div");
})(jQuery);

(function($) {
// 此函数内的$是jRaiser
$("div");
})(jRaiser);

使用多库共存机制

jQuery提供了jQuery.noConflict()这样一个方法,可以把$变量恢复为jQuery加载前的值。

<script type="text/javascript" src="jRaiser-1.3.3.js"></script>
<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript">//<![CDATA[
jQuery.noConflict();
alert($ === jRaiser); // true
//]]></script>

jRaiser也提供了类似的方法。jRaiser.retire()可以把$变量恢复为jRaiser加载前的值;而jRaiser.resume()则恢复jRaiser对$变量的占用。

<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript" src="jRaiser-1.3.3.js"></script>
<script type="text/javascript">//<![CDATA[
jRaiser.retire();
alert($ === jQuery); // true
jRaiser.resume();
alert($ === jRaiser); // true
//]]></script>

同分类推荐文章

  1. 新特性速递:focus()行为新增focusVisible控制 (2026-05-29 16:23:06)
  2. Algorithmic Theming Engines: Building Self-Correcting Color Systems With `contrast-color()` (2026-05-28 21:00:00)
  3. Revealing Text With CSS letter-spacing (2026-05-27 20:37:33)

查看更多 前端 文章 →

建议继续学习

  1. JQuery实现Excel表格呈现 (累计阅读 48,263)
  2. 深入理解Javascript之执行上下文(Execution Context) (累计阅读 18,263)
  3. 从输入 URL 到页面加载完成的过程中都发生了什么事情? (累计阅读 15,802)
  4. 图片动态局部毛玻璃模糊效果的实现 (累计阅读 14,764)
  5. 天朝第二代身份证号码的验证机制 (累计阅读 14,684)
  6. HTML 5 的data-* 自定义属性 (累计阅读 14,242)
  7. 分享一个JQUERY颜色选择插件 (累计阅读 14,142)
  8. 什么是全栈工程师? (累计阅读 13,942)
  9. 快速排序(Quicksort)的Javascript实现 (累计阅读 11,640)
  10. 7 天打造前端性能监控系统 (累计阅读 11,102)