加载jQuery后$冲突的解决办法


Posted in Javascript onJuly 09, 2010

网站开发中的javasript部分,现在的开发人员很少有再去手工写document.getElementById()的了吧,那还不得累死,你还真别说,getElementById还真不好写,字母还挺多又区分大小写,一不留神就写错了。因此一下诸如用$来实现document.getElemetnById()就常见了。

function $() { 
var elements = new Array(); 
for (var i = 0; i < arguments.length; i++) { 
var element = arguments[i]; 
if (typeof element == 'string') 
element = document.getElementById(element); 
if (arguments.length == 1) 
return element; 
elements.push(element); 
} 
return elements; 
}

微软的asp.net ajax客户端框架也有类似用$get来实现的代码。
var $get = Sys.UI.DomElement.getElementById = function Sys$UI$DomElement$getElementById(id, element) { 
/// <param name="id" type="String"></param> 4.5. 
/// <param name="element" domElement="true" optional="true" mayBeNull="true"></param> 6.7. 
/// <returns domElement="true" mayBeNull="true"></returns> 8.9. 
var e = Function._validateParams(arguments, [ 
{name: "id", type: String}, 
{name: "element", mayBeNull: true, domElement: true, optional: true} 
]); 
if (e) throw e; 
if (!element) return document.getElementById(id); 
. if (element.getElementById) return element.getElementById(id); 
// Implementation for browsers that don't have getElementById on elements: 28.29. 
var nodeQueue = []; 
var childNodes = element.childNodes; 
for (var i = 0; i < childNodes.length; i++) { 
var node = childNodes[i]; 
if (node.nodeType == 1) { 
nodeQueue[nodeQueue.length] = node; 
} 
} 
while (nodeQueue.length) { 
node = nodeQueue.shift(); 
if (node.id == id) { 
return node; 
} 
childNodes = node.childNodes; 
for (i = 0; i < childNodes.length; i++) { 
node = childNodes[i]; 
if (node.nodeType == 1) { 
nodeQueue[nodeQueue.length] = node; 
} 
} 
} 
return null; 
}

由于jQuery的简约、优美,更重要的是被微软所大力推广,因此在项目中引入jQuery就显得自然而必然,jQuery采用$函数来返回一个jQuery对象,也就是$=jQuery,引入jQuery后针对$符号问题必然产生冲突,因此主要有2个思路来解决。
一、利用jQuery.noConfict()使得$$等于jQuery,代码为$$=jQuery.noConflict()。这样需要做一下几件事
1、在包含jQuery以及基于jQuery的javasript代码文件中最后加上$$=jQuery.noConflict(),jQuery的VS智能提示文件(jQueryXXX ?vsdoc.js)也最后的window.jQuery = window.$ = jQuery;也改成window.jQuery = window.$$ = jQuery;好了。
2、基于jQuery的插件和扩展文件最前面加上$=jQuery.noConflict();最后面加上$$=jQuery.noConflict();。
3、原有的$的实现文件中,最上面加上jQuery.noConflict()表示将$的“权力”交给其他我们自己的js文件,然后文件最后面加上$$=jQuery.noConflict()。
4、页面引入js的时候注意顺序,jQuery的相关文件放前面,与jQuery不相关的文件放后面。
这样做了之后,$还是表示以前的含义,而使用jQuery则直接用jQuery或者$$就可以了。
优点:只需要改几个文件就能达到目的。
缺点:$$使用起来并不顺手,以后引入jQuery插件时都需要按步骤2进行操作一次。

二、将原有的$进行替换,经过考虑后我采用的第二种方法,因为jQuery在以后的项目中将被广泛使用,使用$$或者jQuery来写代码毕竟别扭。考虑到asp.net ajax的兼容性,因此将原有$替换成$get。用Visual Studio来做替换到也不难

,但也还需要一点步骤。
1、首先用$get("替换掉$(",然后是用$get(‘替换掉$(',最后才是$get替换成$。
2、替换的时候利用VSS的签出提示功能,一个一个文件进行一定的确认(要是出了差错那可不是小事)。最后还是出了一些小问题,在同事的协助下也基本解决了。
3、Visual Studio的替换功能还真是袖里有乾坤,如下的一个Replace in Files东西还真不少。
加载jQuery后$冲突的解决办法
Use那个勾上上,可千万别选Regular expressions,因为在右边清楚的显示$表示End of Line。Look In那个当然选Current Project,当然右边的按钮按下后可以选多个目录来框定反问,这个倒是以前完全没用过的。Look at these file types可以选定特殊的一些文件类型来缩小范围。

Javascript 相关文章推荐
JavaScript异步编程Promise模式的6个特性
Apr 03 Javascript
自己使用jquery写的一个无缝滚动的插件
Apr 30 Javascript
跟我学习javascript的函数调用和构造函数调用
Nov 16 Javascript
javascript的 {} 语句块详解
Feb 27 Javascript
JQuery解析XML的方法小结
Apr 02 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
Sep 19 Javascript
走进AngularJs之过滤器(filter)详解
Feb 17 Javascript
微信小程序实现瀑布流布局与无限加载的方法详解
May 12 Javascript
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
Apr 25 Javascript
使用webpack搭建vue项目实现脚手架功能
Mar 15 Javascript
JS实现给数组对象排序的方法分析
Jun 24 Javascript
JavaScript中变量提升机制示例详解
Dec 27 Javascript
在javascript将NodeList作为Array数组处理的方法
Jul 09 #Javascript
jquery multiSelect 多选下拉框
Jul 09 #Javascript
IE8 chrome中table隔行换色解决办法
Jul 09 #Javascript
jQuery EasyUI NumberBox(数字框)的用法
Jul 08 #Javascript
JSON.parse 解析字符串出错的解决方法
Jul 08 #Javascript
location.href 在IE6中不跳转的解决方法与推荐使用代码
Jul 08 #Javascript
JQuery从头学起第三讲
Jul 06 #Javascript
You might like
用PHP写的MySQL数据库用户认证系统代码
2007/03/22 PHP
使用PHP获取网络文件的实现代码
2010/01/01 PHP
PHP下的浮点运算不准的解决方法
2016/10/27 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
脚本收藏iframe
2006/07/21 Javascript
jquery遍历input取得input的name
2009/04/27 Javascript
javascript new一个对象的实质
2010/01/07 Javascript
JavaScript QueryString解析类代码
2010/01/17 Javascript
基于JQuery的访问WebService的代码(可访问Java[Xfire])
2010/11/19 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
js有关元素内容操作小结
2011/12/20 Javascript
jquery.blockUI.js上传滚动等待效果实现思路及代码
2013/03/18 Javascript
用javascript替换URL中的参数值示例代码
2014/01/27 Javascript
js判断手机和pc端选择不同执行事件的方法
2015/01/30 Javascript
关于List.ToArray()方法的效率测试
2016/09/30 Javascript
Javascript 使用ajax与C#获取文件大小实例详解
2017/01/13 Javascript
详解Node.js串行化流程控制
2017/05/04 Javascript
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
Vue通过URL传参如何控制全局console.log的开关详解
2017/12/07 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
Vue如何提升首屏加载速度实例解析
2020/06/25 Javascript
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
Pyqt QImage 与 np array 转换方法
2019/06/27 Python
Python OpenCV图像指定区域裁剪的实现
2019/10/30 Python
French Connection官网:女装、男装及家居用品
2019/03/18 全球购物
台湾7-ELEVEN线上购物中心:7-11
2021/01/21 全球购物
土木工程师岗位职责
2013/11/24 职场文书
自动化专业个人求职信范文
2013/12/30 职场文书
仲裁协议书
2014/09/26 职场文书
检查机关党的群众路线个人整改措施
2014/10/04 职场文书
对外汉语专业大学生职业生涯规划书
2014/10/11 职场文书
2014年团委工作总结
2014/11/13 职场文书
小学秋季运动会通讯稿
2015/11/25 职场文书
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS