问题描述:

  在Jquery库中,$是JQuery的别名,所有使用$的地方也都可以使用JQuery来替换,如$('#msg')等同于JQuery('#msg')的写法。

  当引入多个js库后,其它的js库中也定义了$符号的话,就导致在使用$命名符时jquery的$和其它框架的$产生冲突(这里的冲突也和js库文件的引入顺序有关)。

情况举例:

复制代码
// js引入顺序不同的结果 ($ 永远代表最后一个定义$的js库的符号) // --1
<script src="prototype.js" type="text/javascript"/>
<script src="jquery.js" type="text/javascript"/>
// -- $代表的是jquery中定义的$符号,也可写成JQuery('body').hide()。 // --2
<script src="jquery.js" type="text/javascript"/>
<script src="prototype.js" type="text/javascript"/>
// -- $代表的prototype.js中定义的$符号,如果我们想要调用jquery.js中的工厂选择函数功能的话,只能用全称写法JQuery('body').hide()。

解决冲突:

  jquery提供了一个noConfilict的API来解决。

使用 noConflict() 方法为 jQuery 变量规定新的名称:

var jq=$.noConflict();

定义和用法

noConflict() 方法让渡变量 $ 的 jQuery 控制权。

该方法释放 jQuery 对 $ 变量的控制。

该方法也可用于为 jQuery 变量规定新的自定义名称。

提示:在其他 JavaScript 库为其函数使用 $ 时,该方法很有用。

语法:

jQuery.noConflict(removeAll)

说明

许多 JavaScript 库使用 $ 作为函数或变量名,jQuery 也一样。在 jQuery 中,$ 仅仅是 jQuery 的别名,因此即使不使用 $ 也能保证所有功能性。假如我们需要使用 jQuery 之外的另一 JavaScript 库,我们可以通过调用 $.noConflict() 向该库返回控制权:

<script type="text/javascript" src="other_lib.js"></script>
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript">
$.noConflict();
// 使用另一个库的 $ 的代码
</script>

可以与 .ready() 方法结合起来使用,来为 jQuery 对象起别名,这项技术非常有效:

<script type="text/javascript" src="other_lib.js"></script>
<script type="text/javascript" src="jquery.js"></script> <script type="text/javascript">
$.noConflict();
jQuery(document).ready(function($) {
// 使用 jQuery $ 的代码
});
// 使用其他库的 $ 的代码
</script>

此外,通过向该方法传递参数 true,我们可以将 $ 和 jQuery 的控制权都交还给原来的库。用之前请考虑清楚!

这是相对于简单的 noConflict 方法更极端的版本,因为这将完全重新定义 jQuery。这通常用于一种极端的情况,比如你想要将 jQuery 嵌入一个高度冲突的环境。注意:调用此方法后极有可能导致插件失效。


实例

例子 1

将 $ 引用的对象映射回原始的对象:

jQuery.noConflict();

jQuery("div p").hide();    // 使用 jQuery

$("content").style.display = "none";    // 使用其他库的 $()

例子 2

恢复使用别名 $,然后创建并执行一个函数,在这个函数的作用域中仍然将 $ 作为 jQuery 的别名来使用。在这个函数中,原来的 $ 对象是无效的。这个函数对于大多数不依赖于其他库的插件都十分有效:

jQuery.noConflict();

(function($) {
$(function() {
// 使用 $ 作为 jQuery 别名的代码
});
})(jQuery); ... // 其他用 $ 作为别名的库的代码

例子 3

可以将 jQuery.noConflict() 与简写的 ready 结合,使代码更紧凑:

jQuery.noConflict()(function(){
// 使用 jQuery 的代码
}); ... // 其他库使用 $ 做别名的代码

例子 4

创建一个新的别名用以在接下来的库中使用 jQuery 对象:

var j = jQuery.noConflict();

j("div p").hide();    // 基于 jQuery 的代码

$("content").style.display = "none";    // 基于其他库的 $() 代码

例子 5

完全将 jQuery 移到一个新的命名空间:

var dom = {};
dom.query = jQuery.noConflict(true);

结果:

dom.query("div p").hide();    // 新 jQuery 的代码

$("content").style.display = "none";    // 另一个库 $() 的代码

jQuery("div > p").hide();    // 另一个版本 jQuery 的代码

关于jQuery中的$发生冲突及解决方案的更多相关文章

  1. jQuery中 $ 符号的冲突问题

    jQuery中 $ 符号的冲突问题是常见问题之一.   在jQuery中,$是jQuery的别名,为了书写方便,我们更习惯用$('#id')这一类的方式来书写代码.当同一页面引用了jQuery多个版本 ...

  2. jQuery 中的防冲突(noConflict)机制

    许多的 JS 框架类库都选择使用 $ 符号作为函数或变量名,jQuery 是其中最为典型的一个.在 jQuery 中,$ 符号只是 window.jQuery 对象的一个引用,因此即使 $ 被删除,w ...

  3. 谈谈 jQuery 中的防冲突(noConflict)机制

    许多的 JS 框架类库都选择使用 $ 符号作为函数或变量名,jQuery 是其中最为典型的一个.在 jQuery 中,$ 符号只是 window.jQuery 对象的一个引用,因此即使 $ 被删除,w ...

  4. MVC:控制器名与被调用模型名称发生冲突的解决方案

    控制器名与被调用的模型名发生了冲突: 有两种解决方案: (1)将被调用的模型类名进行修改 例如: (2)对被调用的模型进行起一个别名 以上 加油ヾ(◍°∇°◍)ノ゙

  5. IE8 环境的 JQuery 中的 $.ajax 拒绝访问---解决方案

    需求是兼容到 IE8. $.ajax 总是请求失败,直接跳转到 error 函数中,报错:拒绝访问. 网上的一些解决方法都试过了还是没有用,比如再请求之前设置 jQuery.support.cors ...

  6. Ubuntu中libprotobuf版本冲突的解决方案

    先说解决方法: 因为我出现这个比较奇特,我再下面环境中的第一个项目有这个问题,但是不知道怎么瞎折腾就搞定了,不报这个异常了 不论是Qt Creator直接运行Debug或者Release都没问题 但是 ...

  7. Maven中 jar包冲突原理与解决办法

    Maven中jar包冲突是开发过程中比较常见而又令人头疼的问题,我们需要知道 jar包冲突的原理,才能更好的去解决jar包冲突的问题.本文将从jar包冲突的原理和解决两个方面阐述Maven中jar包冲 ...

  8. php中并发读写文件冲突的解决方案(文件锁应用示例)

    PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适 ...

  9. 解决jQuery中美元符号($)命名与别的js脚本库引用冲突方法

    在Jquery中,$是JQuery的别名,所有使用$的地方也都可以使用JQuery来替换,如$('#msg')等同于JQuery('#msg') 的写法.然而,当我们引入多个js库后,在另外一个js库 ...

随机推荐

  1. POJ1111【BFS】

    在搜1011的时候误搜了1111,简单BFS吧,多一个X就是多四个面,每次看看他的四个面有多少个重复的,然后剪掉,最后答案加上就好了: code: //#include <bits/stdc++ ...

  2. 2012 Noip提高组 Day2

    1265. [NOIP2012] 同余方程 ★☆   输入文件:mod.in   输出文件:mod.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述] 求关于 x 的同余方 ...

  3. mysql之SQL入门与提升(三)

    今天继续讲mysql数据库 先创建一张Persons表 CREATE TABLE Persons(P_Id int NOT NULL,LastName varchar(255) NOT NULL,Fi ...

  4. self.tabBarController.selectedIndex

    KindViewController *vc =((UINavigationController *) [self.tabBarController viewControllers][]).viewC ...

  5. ZROI 部分题目题解

    ZROI 部分题目题解 335 首先发现一个性质: 对于最短的边而言,所有点的路径如果经过了这条边,那么路径的权值就是这条边的边权(废话) 那么我们把最短的边拎出来,可以发现,博物馆确定时,每个点按照 ...

  6. Gym - 101810A ACM International Collegiate Programming Contest (2018)

    bryce1010模板 http://codeforces.com/gym/101810/problem/A 大模拟,写崩了,代码借队友的...... 注意处理段与段的连接问题: #include&l ...

  7. linux下svn服务器搭建步骤

    安装步骤如下: 1.yum install subversion 2.输入rpm -ql subversion查看安装位置,如下图:   我们知道svn在bin目录下生成了几个二进制文件. 输入 sv ...

  8. Excel 通过pl/sql导入到数据库 文本导入器 odbc导入器

     Excel 通过pl/sql导入到数据库 第一种方法:文本导入器 1.准备Excel导入数据   jc.xls 2.把 jc.xls 文件 改为 jc.csv文件 3.在数据库里建一张jc表(FLH ...

  9. 阿里云-域名免费申请ssl证书过程

    1.运行证书服务docker docker run --entrypoint="/bin/sh" -it --name certbotsh certbot/certbot:late ...

  10. centos下gitlab的简单安装配置

    一.安装前配置yum源 #wget https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh #s ...