加載jQuery后$沖突的解決辦法
更新時(shí)間:2010年07月09日 19:50:00 作者:
因?yàn)閖query中也有$調(diào)用,如果原來(lái)已經(jīng)定義了,難免會(huì)沖突。下面是一些解決思路。
網(wǎng)站開(kāi)發(fā)中的javasript部分,現(xiàn)在的開(kāi)發(fā)人員很少有再去手工寫document.getElementById()的了吧,那還不得累死,你還真別說(shuō),getElementById還真不好寫,字母還挺多又區(qū)分大小寫,一不留神就寫錯(cuò)了。因此一下諸如用$來(lái)實(shí)現(xiàn)document.getElemetnById()就常見(jiàn)了。
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來(lái)實(shí)現(xiàn)的代碼。
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的簡(jiǎn)約、優(yōu)美,更重要的是被微軟所大力推廣,因此在項(xiàng)目中引入jQuery就顯得自然而必然,jQuery采用$函數(shù)來(lái)返回一個(gè)jQuery對(duì)象,也就是$=jQuery,引入jQuery后針對(duì)$符號(hào)問(wèn)題必然產(chǎn)生沖突,因此主要有2個(gè)思路來(lái)解決。
一、利用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的插件和擴(kuò)展文件最前面加上$=jQuery.noConflict();最后面加上$$=jQuery.noConflict();。
3、原有的$的實(shí)現(xiàn)文件中,最上面加上jQuery.noConflict()表示將$的“權(quán)力”交給其他我們自己的js文件,然后文件最后面加上$$=jQuery.noConflict()。
4、頁(yè)面引入js的時(shí)候注意順序,jQuery的相關(guān)文件放前面,與jQuery不相關(guān)的文件放后面。
這樣做了之后,$還是表示以前的含義,而使用jQuery則直接用jQuery或者$$就可以了。
優(yōu)點(diǎn):只需要改幾個(gè)文件就能達(dá)到目的。
缺點(diǎn):$$使用起來(lái)并不順手,以后引入jQuery插件時(shí)都需要按步驟2進(jìn)行操作一次。
二、將原有的$進(jìn)行替換,經(jīng)過(guò)考慮后我采用的第二種方法,因?yàn)閖Query在以后的項(xiàng)目中將被廣泛使用,使用$$或者jQuery來(lái)寫代碼畢竟別扭??紤]到asp.net ajax的兼容性,因此將原有$替換成$get。用Visual Studio來(lái)做替換到也不難
,但也還需要一點(diǎn)步驟。
1、首先用$get("替換掉$(",然后是用$get(‘替換掉$(',最后才是$get替換成$。
2、替換的時(shí)候利用VSS的簽出提示功能,一個(gè)一個(gè)文件進(jìn)行一定的確認(rèn)(要是出了差錯(cuò)那可不是小事)。最后還是出了一些小問(wèn)題,在同事的協(xié)助下也基本解決了。
3、Visual Studio的替換功能還真是袖里有乾坤,如下的一個(gè)Replace in Files東西還真不少。

Use那個(gè)勾上上,可千萬(wàn)別選Regular expressions,因?yàn)樵谟疫吳宄娘@示$表示End of Line。Look In那個(gè)當(dāng)然選Current Project,當(dāng)然右邊的按鈕按下后可以選多個(gè)目錄來(lái)框定反問(wèn),這個(gè)倒是以前完全沒(méi)用過(guò)的。Look at these file types可以選定特殊的一些文件類型來(lái)縮小范圍。
復(fù)制代碼 代碼如下:
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來(lái)實(shí)現(xiàn)的代碼。
復(fù)制代碼 代碼如下:
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的簡(jiǎn)約、優(yōu)美,更重要的是被微軟所大力推廣,因此在項(xiàng)目中引入jQuery就顯得自然而必然,jQuery采用$函數(shù)來(lái)返回一個(gè)jQuery對(duì)象,也就是$=jQuery,引入jQuery后針對(duì)$符號(hào)問(wèn)題必然產(chǎn)生沖突,因此主要有2個(gè)思路來(lái)解決。
一、利用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的插件和擴(kuò)展文件最前面加上$=jQuery.noConflict();最后面加上$$=jQuery.noConflict();。
3、原有的$的實(shí)現(xiàn)文件中,最上面加上jQuery.noConflict()表示將$的“權(quán)力”交給其他我們自己的js文件,然后文件最后面加上$$=jQuery.noConflict()。
4、頁(yè)面引入js的時(shí)候注意順序,jQuery的相關(guān)文件放前面,與jQuery不相關(guān)的文件放后面。
這樣做了之后,$還是表示以前的含義,而使用jQuery則直接用jQuery或者$$就可以了。
優(yōu)點(diǎn):只需要改幾個(gè)文件就能達(dá)到目的。
缺點(diǎn):$$使用起來(lái)并不順手,以后引入jQuery插件時(shí)都需要按步驟2進(jìn)行操作一次。
二、將原有的$進(jìn)行替換,經(jīng)過(guò)考慮后我采用的第二種方法,因?yàn)閖Query在以后的項(xiàng)目中將被廣泛使用,使用$$或者jQuery來(lái)寫代碼畢竟別扭??紤]到asp.net ajax的兼容性,因此將原有$替換成$get。用Visual Studio來(lái)做替換到也不難
,但也還需要一點(diǎn)步驟。
1、首先用$get("替換掉$(",然后是用$get(‘替換掉$(',最后才是$get替換成$。
2、替換的時(shí)候利用VSS的簽出提示功能,一個(gè)一個(gè)文件進(jìn)行一定的確認(rèn)(要是出了差錯(cuò)那可不是小事)。最后還是出了一些小問(wèn)題,在同事的協(xié)助下也基本解決了。
3、Visual Studio的替換功能還真是袖里有乾坤,如下的一個(gè)Replace in Files東西還真不少。

Use那個(gè)勾上上,可千萬(wàn)別選Regular expressions,因?yàn)樵谟疫吳宄娘@示$表示End of Line。Look In那個(gè)當(dāng)然選Current Project,當(dāng)然右邊的按鈕按下后可以選多個(gè)目錄來(lái)框定反問(wèn),這個(gè)倒是以前完全沒(méi)用過(guò)的。Look at these file types可以選定特殊的一些文件類型來(lái)縮小范圍。
相關(guān)文章
jQuery實(shí)現(xiàn)數(shù)秒后自動(dòng)提交form的方法
這篇文章主要介紹了jQuery實(shí)現(xiàn)數(shù)秒后自動(dòng)提交form的方法,實(shí)例分析了jQuery實(shí)現(xiàn)form表單延時(shí)提交的技巧,需要的朋友可以參考下2015-03-03jQuery對(duì)html元素的取值與賦值實(shí)例詳解
這篇文章主要介紹了jQuery對(duì)html元素的取值與賦值,較為詳細(xì)的分析了jQuery針對(duì)常見(jiàn)html元素的獲取與賦值技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-12-12jQuery實(shí)現(xiàn)可拖拽的許愿墻效果【附demo源碼下載】
這篇文章主要介紹了jQuery實(shí)現(xiàn)可拖拽的許愿墻效果,可實(shí)現(xiàn)拖拽圖片與層疊顯示功能,涉及jQuery插件的簡(jiǎn)單使用,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2016-09-09jQuery實(shí)現(xiàn)自動(dòng)調(diào)整字體大小的方法
這篇文章主要介紹了jQuery實(shí)現(xiàn)自動(dòng)調(diào)整字體大小的方法,涉及jQuery針對(duì)頁(yè)面屬性與樣式動(dòng)態(tài)操作的相關(guān)技巧,需要的朋友可以參考下2015-06-06jquery實(shí)現(xiàn)炫酷的疊加層自動(dòng)切換特效
這篇文章主要給大家分享的是一則jquery實(shí)現(xiàn)炫酷的疊加層自動(dòng)切換特效,效果非常棒,這里推薦給小伙伴們。2015-02-02jQuery實(shí)現(xiàn)仿百度帖吧頭部固定導(dǎo)航效果
這篇文章主要介紹了jQuery實(shí)現(xiàn)仿百度帖吧頭部固定導(dǎo)航效果,涉及jquery針對(duì)頁(yè)面高度計(jì)算與樣式的動(dòng)態(tài)添加及刪除技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-08-08jquery+php后臺(tái)實(shí)現(xiàn)省市區(qū)聯(lián)動(dòng)功能示例
這篇文章主要介紹了jquery+php后臺(tái)實(shí)現(xiàn)省市區(qū)聯(lián)動(dòng)功能,涉及jQuery事件響應(yīng)及頁(yè)面元素屬性動(dòng)態(tài)變換,以及ajax后臺(tái)動(dòng)態(tài)交互相關(guān)操作技巧,需要的朋友可以參考下2019-05-05