`
luozhonghua2014
  • 浏览: 62348 次
文章分类
社区版块
存档分类
最新评论

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库。

分享到:
评论

相关推荐

    ecshop和jquery冲突的解决方法

    在本篇文章中,我们将深入探讨如何有效解决ecshop与jQuery之间的冲突问题,并提供一系列实用的解决方案,帮助开发者更好地处理这两种技术共存时可能遇到的问题。 ### 一、Ecshop简介 Ecshop是一款开源的电子商务...

    Sitepoint.jQuery.Novice.to.Ninja.Feb.2010.rar

    通过学习《Sitepoint.jQuery.Novice.to.Ninja.Feb.2010》这本书,读者将深入理解jQuery的工作原理,掌握如何有效地使用这个工具,提升Web开发效率,创造出更具交互性和用户体验的网页应用。无论你是初学者还是有一定...

    解决ECSHOP和jquery冲突问题所需文件

    总的来说,解决ECSHOP与jQuery的冲突需要理解JavaScript的基本原理,熟悉jQuery的使用方式,以及具备一定的代码调试技巧。通过适当的代码组织和利用jQuery提供的工具,我们可以成功地在ECSHOP中整合并充分利用jQuery...

    《jquery.基础教程》源代码

    6. **jQuery与其他库的兼容性**:jQuery通常与其他JavaScript库如Prototype、MooTools等能良好共存,通过使用$.noConflict()方法可以避免命名空间冲突。 7. **jQuery插件**:jQuery拥有丰富的插件生态系统,如...

    jquery 3.5.1

    jQuery提供了`noConflict()`方法来解决与其他JavaScript库可能存在的命名空间冲突。如果其他库也使用了`$`作为简写,可以这样处理: ```javascript var j = $.noConflict(); // 使用j代替$ j("selector")....

    Learning_jquery中文版.pdf

    1. 使用NoConflict模式:当与其他JavaScript库共用时,jQuery的`$`符号可能导致冲突,`$.noConflict()`可以帮助解决这个问题。 2. AMD/CMD模块化:通过RequireJS或Sea.js等工具,可以将jQuery及其插件按需加载,...

    jquery导航下拉菜单

    本文将深入探讨“jQuery下拉导航菜单”的实现原理、特点以及应用技巧,帮助你打造美观且易用的网页导航。 一、jQuery简介 jQuery是一款轻量级的JavaScript库,它简化了JavaScript的DOM操作,事件处理,动画设计...

    jQuery 2.0.3 源码分析之core(一)整体架构

    总结来说,jQuery的源码分析给我们提供了深入理解库内部工作原理的机会,并能够借鉴其在设计和实现上的技巧。通过无new构造模式、工厂方法模式、作用域隔离、AMD规范支持等设计思想,jQuery成为了一个强大、灵活且...

    JQuery自学第三天.docx

    在JQuery自学的第三天,我们深入理解了JQuery与原生JavaScript的区别、冲突解决策略、核心函数的用法以及JQuery对象的概念。 1. **JQuery与原生JS的区别**: - 加载模式:原生JS等待DOM和所有资源加载完毕才执行,...

    jquery-3.2.1包

    jQuery设计时考虑到了与其他库的共存,通过`$.noConflict()`方法可以避免命名冲突,与AngularJS、React等现代前端框架也能良好配合。 7. **学习和应用**: 对于初学者,可以通过官方文档、在线教程和实战项目来...

    Chapter2(jquery).zip

    - **NoConflict模式**:使用`$.noConflict()`释放$符号,避免与其他库冲突。 10. **jQuery未来发展趋势** - **jQuery UI**:提供丰富的用户界面组件,如日期选择器、对话框等。 - **jQuery Mobile**:针对移动...

    jQuery 教程 源码+实例+注释 [新手入门提高速成]

    1. **性能优化**:了解 `$()` 和 `$(document).ready()` 之间的区别,以及如何正确使用 `$.noConflict()` 避免与其他库冲突。 2. **jQuery与ES6**:对比 jQuery 与现代 JavaScript(如 ES6+)的差异,学习如何将 ...

    锋利的JQuery第二版的源码

    8. **版本迭代**:jQuery从1.x到3.x的版本升级,不断优化性能和兼容性,同时引入了模块化设计,如`jQuery.noConflict()`用于解决与其他库的冲突,`$.Deferred()`用于异步操作的管理。 9. **响应式与移动优化**:...

    Bookmarklet实现启动jQuery(模仿 云输入法)

    在本文中,我们将深入探讨如何使用Bookmarklet来启动jQuery,这类似于流行的sogo云输入法和QQ云输入法所采用的方法。 首先,理解Bookmarklet的基本原理:通常,书签用于保存网页URL以便稍后访问。然而,通过将书签...

    Jquery,15天学会,Ajax框架,入门Jquery

    2. **NoConflict模式**:理解`.noConflict()`方法的作用,解决命名冲突问题。 ### 第15天:实战项目与复习 1. **综合应用**:通过一个完整的项目,整合所学的jQuery知识,提升实战能力。 2. **回顾与总结**:回顾...

    jquery类库和帮助文档

    理解jQuery选择器的工作原理和优化策略,如使用ID选择器而非类选择器,避免遍历整个DOM树,以及合理利用缓存,都是提高页面性能的关键。 九、jQuery与其它库的共存 jQuery提供了`noConflict()`模式,允许在同一个...

    jQuery类库源文件

    另外,可以使用`$.noConflict()`解决与其他JavaScript库的命名冲突问题。 ### 10. 深入学习 深入学习jQuery,可以参考官方文档、教程和示例,理解其内部工作原理,如Sizzle选择器引擎、事件委托、性能优化等高级...

    实用的jquery星星评分效果代码.zip

    使用jQuery的`.noConflict()`模式可以防止与其他库冲突。同时,优化CSS选择器以提高性能,并考虑在大型项目中使用事件委托来减少内存占用。 9. **自定义和扩展**:这个基础的星星评分代码可以进一步定制,比如添加...

    jQuery开发神器

    4. 版本兼容性:jQuery提供`.ready()`确保DOM加载完成后再执行代码,`.noConflict()`解决与其他库的冲突问题。 三、jQuery最佳实践 1. 适当使用缓存:对于频繁使用的DOM元素,可先存储为jQuery对象,避免重复查询...

    jquery资料

    **jQuery 深入学习指南** jQuery 是一个广泛使用的 JavaScript 库,它简化了 HTML 文档遍历、事件处理、动画以及 Ajax 交互等任务。这个资料包将带你深入理解 jQuery,助你从初学者迅速成长为熟练掌握者,让你在...

Global site tag (gtag.js) - Google Analytics