加载jQuery后$冲突的解决办法_Javascript教程-查字典教程网
加载jQuery后$冲突的解决办法
加载jQuery后$冲突的解决办法
发布时间:2016-12-30 来源:查字典编辑
摘要:网站开发中的javasript部分,现在的开发人员很少有再去手工写document.getElementById()的了吧,那还不得累死,你...

网站开发中的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东西还真不少。

Use那个勾上上,可千万别选Regular expressions,因为在右边清楚的显示$表示End of Line。Look In那个当然选Current Project,当然右边的按钮按下后可以选多个目录来框定反问,这个倒是以前完全没用过的。Look at these file types可以选定特殊的一些文件类型来缩小范围。

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新Javascript教程学习
    热门Javascript教程学习
    编程开发子分类