加载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 相关文章推荐
js二维数组定义和初始化的三种方法总结
Mar 03 Javascript
jQuery制作简单柱状图实例
Jan 28 Javascript
js仿黑客帝国字母掉落效果代码分享
Nov 08 Javascript
判断JS对象是否拥有某属性的方法推荐
May 12 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
Apr 20 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐二)
Jul 12 Javascript
jQuery双向列表选择器DIV模拟版
Nov 01 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
Dec 31 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
May 18 Javascript
手把手教你vue-cli单页到多页应用的方法
May 31 Javascript
JS图片懒加载的优点及实现原理
Jan 10 Javascript
vue实现图片按比例缩放问题操作
Aug 11 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 友好URL的实现(吐血推荐)
2008/10/04 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
解析smarty 截取字符串函数 truncate的用法介绍
2013/06/20 PHP
解析yahoo邮件用phpmailer发送的实例
2013/06/24 PHP
php微信公众账号开发之前五个坑(一)
2016/09/18 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
PHP与Perl之间知识点区别整理
2019/03/19 PHP
php命名空间设计思想、用法与缺点分析
2019/07/17 PHP
php的单例模式及应用场景详解
2021/02/27 PHP
javascript innerText和innerHtml应用
2010/01/28 Javascript
javascript复制对象使用说明
2011/06/28 Javascript
JS性能优化笔记搜索整理
2013/08/21 Javascript
JavaScript获取当前网页最后修改时间的方法
2015/04/03 Javascript
javascript 实现map集合
2015/04/03 Javascript
JavaScript Window浏览器对象模型方法与属性汇总
2015/04/20 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
2015/06/19 Javascript
Nodejs如何搭建Web服务器
2016/03/28 NodeJs
js中开关变量使用实例
2017/02/24 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
2017/03/14 Javascript
element ui table(表格)实现点击一行展开功能
2018/12/04 Javascript
JS中自定义事件的使用与触发操作实例分析
2019/11/01 Javascript
微信小程序实现底部弹出模态框
2020/11/18 Javascript
Python 除法小技巧
2008/09/06 Python
Python浅拷贝与深拷贝用法实例
2015/05/09 Python
Django自定义插件实现网站登录验证码功能
2017/04/19 Python
Python调用C++,通过Pybind11制作Python接口
2018/10/16 Python
在Python中实现shuffle给列表洗牌
2018/11/08 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
matplotlib自定义鼠标光标坐标格式的实现
2021/01/08 Python
CSS Houdini实现动态波浪纹效果
2019/07/30 HTML / CSS
a标签下载链接的简单实现
2016/09/13 HTML / CSS
小学生手册家长评语
2014/04/16 职场文书
2014年内勤工作总结
2014/11/24 职场文书
关于感谢信的范文
2015/01/23 职场文书
大学生村官驻村工作心得体会
2016/01/23 职场文书