jQuery.noConflict() 解决冲突 原理深入

jQuery.noConflict()函数用于让出jQuery库对变量$(和变量jQuery)的控制权。

一般情况下,在jQuery库中,变量$是变量jQuery的别名,它们之间是等价的,例如jQuery("p")$("p")是等价的。由于变量$只有一个字符,并且特点鲜明,因此我们更加习惯使用$来操作jQuery库。

不过,其他JS库也可能使用变量$来进行操作,例如Prototype库。这个时候两个库可能会由于变量$的控制权问题而发生冲突。

此时,你可以使用该函数让出jQuery库对变量$的控制权,将该变量交给上一个实现它的JS库,之后我们只能使用变量jQuery来操作jQuery库。

此外,使用该函数,还可以同时让出变量$和变量jQuery的控制权,从而实现多个不同版本的jQuery库共存(详情见下面的示例说明)。

该函数属于全局jQuery对象。

语法

静态函数jQuery.noConflict()的语法如下:

jQuery.noConflict( [ removeAll ] )

参数

参数 描述
removeAll 可选/Boolean类型是否彻底移交对变量jQuery的控制权,默认为false

如果省略了参数removeAll或该参数不为true,则表示只让出对变量$的控制权;如果该参数为true,则表示同时让出变量$jQuery的控制权。

返回值

jQuery.noConflict()函数的返回值是jQuery类型,返回变量jQuery的引用。

示例&说明

以下是加载Prototype和jQuery库的情况:

<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
// 让出对变量$的控制权
jQuery.noConflict();

// 使用jQuery进行DOM操作
jQuery("#uname").hide();

// 使用Prototype进行DOM操作
$("myDiv").setStyle( {color: "#ffffff"} );
</script>

运行代码 (以下代码请自行复制到演示页面运行,注意不要同时执行,请分别执行)

此外,我们还可以使用其他自定义的变量名来操作jQuery:

// 让出对变量$的控制权,并将jQuery赋给新的别名j
var j = jQuery.noConflict();

// 基于jQuery进行DOM操作(使用变量j)
j("#uname").hide();

// 基于Prototype进行DOM操作
$("myDiv").setStyle( {color: "#ffffff"} );

即使是多个库共存,我们也可以在jQuery.ready()的回调函数或其他自定义函数中将局部变量$作为jQuery的别名使用:

// 让出jQuery库对变量$的控制权
jQuery.noConflict();

jQuery(document).ready(function($){
    // 使用局部变量$进行jQuery操作
    $("p").css("color", "");    
});

(function($){
    // 使用局部变量$进行jQuery操作
    $("ul li").addClass("item");    
}(jQuery));

如果要实现两个版本的jQuery库共存,我们可以编写如下代码:

<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript" src="jquery-1.11.1.js"></script>
<script type="text/javascript">
// 让出jQuery-1.11.1对变量$和变量jQuery的控制权
var j = jQuery.noConflict( true );

document.writeln( j.fn.jquery ); // 1.11.1

document.writeln( $.fn.jquery ); // 1.4.2
document.writeln( jQuery.fn.jquery ); // 1.4.2

/*
 * 如果前面的jQuery.noConflict()没有传入参数true,
 * 也就是说只让出变量$的控制,则$表示1.4.2,jQuery表示1.11.1
 * 此时,jQuery.fn.jquery为1.11.1
 */
 </script>

三个版本的jQuery库共存,对应的jQuery示例代码如下:

<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript" src="jquery-1.8.3.js"></script>
<script type="text/javascript" src="jquery-1.11.1.js"></script>
<script type="text/javascript">
// 让出jQuery-1.11.1对变量$和变量jQuery的控制权,使用变量j来控制
var j = jQuery.noConflict( true );

// 让出jQuery-1.8.3对变量$的控制权
jQuery.noConflict();

document.writeln( j.fn.jquery ); // 1.11.1
document.writeln( jQuery.fn.jquery ); // 1.8.3
document.writeln( $.fn.jquery ); // 1.4.2
</script>

注意:多个可能存在全局变量重名冲突的JS库,变量的实际控制权一般取决于JS库的加载顺序。以上面三个版本的jQuery库的示例代码为例,后加载的jQuery库的变量覆盖了之前版本的变量,因此每次让出变量的控制权,控制权就会交给上一个JS库。

时间: 2024-12-30 10:22:23

jQuery.noConflict() 解决冲突 原理深入的相关文章

jquery插件冲突(jquery.noconflict)解决方法分享

 本文主要解决了如何让多个不同的jQuery版本在同一个页面并存而不冲突的方法,需要的朋友可以参考下 许多的 JS 框架类库都选择使用$符号作为函数或变量名,jQuery是其中最为典型的一个.在 jQuery 中,$ 符号只是 window.jQuery 对象的一个引用,因此即使 $ 被删除,window.jQuery 依然是保证整个类库完整性的坚强后盾.jQuery 的 API 设计充分考虑了多框架之间的引用冲突,我们可以使用 jQuery.noConflict 方法来轻松实现控制权的移交.

jquery插件冲突(jquery.noconflict)解决方法分享_jquery

许多的 JS 框架类库都选择使用$符号作为函数或变量名,jQuery是其中最为典型的一个.在 jQuery 中,$ 符号只是 window.jQuery 对象的一个引用,因此即使 $ 被删除,window.jQuery 依然是保证整个类库完整性的坚强后盾.jQuery 的 API 设计充分考虑了多框架之间的引用冲突,我们可以使用 jQuery.noConflict 方法来轻松实现控制权的移交. jQuery.noConflict 方法包含一个可选的布尔参数[1],用以决定移交 $ 引用的同时是否

jQuery中noConflict解决冲突问题

noConflict方法可以处理一些标记占用的冲突问题(这是目前我觉得的实用的用途) jQuery.noConflict()函数用于让出jQuery库对变量$(和变量jQuery)的控制权. 一般情况下,在jQuery库中,变量$是变量jQuery的别名,它们之间是等价的,例如jQuery("p")和$("p")是等价的.由于变量$只有一个字符,并且特点鲜明,因此我们更加习惯使用$来操作jQuery库. 不过,其他JS库也可能使用变量$来进行操作,例如Prototy

轻松搞定jQuery.noConflict()_jquery

jQuery是目前使用最广泛的前端框架之一,有大量的第三方库和插件基于它开发.为了避免全局命名空间污染,jQuery提供了jQuery.noConflict()方法解决变量冲突.这个方法,毫无疑问,非常有效.遗憾的是,jQuery的官方文档对该方法的描述不够清晰,许多开发者并不清楚当他们调用jQuery.noConflict()时,究竟发生了什么,从而导致在使用时出现了许多问题.尽管如此,jQuery.noConflict()背后实现原理依然值得Web开发者学习掌握,成为解决类似全局命名空间污染

三分钟带你玩转jQuery.noConflict()_jquery

jQuery是目前使用最广泛的前端框架之一,有大量的第三方库和插件基于它开发.为了避免全局命名空间污染,jQuery提供了jQuery.noConflict()方法解决变量冲突.这个方法,毫无疑问,非常有效.遗憾的是,jQuery的官方文档对该方法的描述不够清晰,许多开发者并不清楚当他们调用jQuery.noConflict()时,究竟发生了什么,从而导致在使用时出现了许多问题.尽管如此,jQuery.noConflict()背后实现原理依然值得Web开发者学习掌握,成为解决类似全局命名空间污染

『jQuery』名称冲突使用noConflict方法解决_jquery

jQuery 使用 $ 符号作为 jQuery 的简介方式. 某些其他 JavaScript 库中的函数(比如 Prototype)同样使用 $ 符号. jQuery 使用名为 noConflict() 的方法来解决该问题. var jq=jQuery.noConflict(),帮助使用自己的名称(比如 jq)来代替 $ 符号. 复制代码 代码如下: <html> <head> <script type="text/javascript" src=&quo

jquery解决冲突办法

问题描述 <head><title></title><scripttype="text/javascript"src="jquery-1.11.1.min.js"></script><scriptlanguage="javascript"type="text/javascript">jQuery.noConflict();jQuery(document).

jQuery自定义添加&quot;$&quot;与解决&quot;$&quot;冲突的方法_jquery

本文实例讲述了jQuery自定义添加"$"与解决"$"冲突的方法.分享给大家供大家参考.具体分析如下: 1.自定义添加$ 虽然jQuery很强大,但无论如何,jQuery都不可能满足所有用户的需求,而且有一些需求十分小众,也不适合放到整个jQuery框架中,正是因为这一点,jQuery提供了用户自定义添加"$"的方法. 代码如下: 复制代码 代码如下: $.fn.disable = function() {  return this.each(f

jquery解决冲突

  在JQuery中,$是JQuery的别名,所有使用$的地方也都可以使用JQuery来替换,如$('#msg')等同于JQuery('#msg') 的写法.然而,当我们引入多个js库后,在另外一个js库中也定义了$符号的话,那么我们在使用$符号时就发生了冲突.下面以引入两个库文件 jquery.js和prototype.js为例来进行说明.  第一种情况:jquery.js在prototype.js之后进行引入,如: < script src = " prototype.js "