$(id)函數衝突 Discuz使用了S()做爲對象選取函數,恰好與jQuery默認的$()函數重合形成衝突,代碼依舊位於include/common.js中,以下:jquery
Code: function $(id) { return document.getElementById(id); } 解決方法1:dom
將jquery.js在common.js以前載入,否則jquery的$()函數會覆蓋common.js的$()函數;而後用到jQuery的$()函數的地方都用jQuery()代替。ide
解決方法2:函數
將jquery.js在common.js以後載入,在調用jQuery的函數前使用一下代碼:插件
Code: var jq = jQuery.noConflict(); 以上是將$()函數映射回原來的$()函數;以後即可以使用jq()或jQuery()來代替jQuery原來的$()函數,這裏jq和jQuery相同,而$()函數則是原來Discuz的$()函數。對象
解決方法2也可以使用jQuery.noConflict()的其餘用法代替,參見後面的使用說明。作用域
=============get
jQuery.noConflict() 使用說明io
運行這個函數將變量$的控制權讓渡給第一個實現它的那個庫。這有助於確保jQuery不會與其餘庫的$對象發生衝突。function
在運行這個函數後,就只能使用jQuery變量訪問jQuery對象。例如,在要用到$(「div p」)的地方,就必須換成jQuery(「div p」)。
注意:這個函數必須在你導入jQuery文件以後,而且在導入另外一個致使衝突的庫以前使用。固然也應當在其餘衝突的庫被使用以前,除非jQuery是最後一個導入的。
Code: jQuery.noConflict(); // 使用 jQuery jQuery("div p").hide(); // 使用其餘庫的 $() $("content").style.display = 'none'; 恢復使用別名$,而後建立並執行一個函數,在這個函數的做用域中仍然將$做爲jQuery的別名來使用。在這個函數中,原來的$對象是無效的。這個函數對於大多數不依賴於其餘庫的插件都十分有效。
Code: jQuery.noConflict(); (function($) { $(function() { // 使用 $ 做爲 jQuery 別名的代碼 }); })(jQuery); // 其餘用 $ 做爲別名的庫的代碼 能夠經過jQuery.noConflict()級聯函數來簡化寫法。
Code: jQuery.noConflict()(function(){ // 使用 $ 做爲 jQuery 別名的代碼 }); // 其餘用 $ 做爲別名的庫的代碼 建立一個新的別名用以在接下來的庫中使用jQuery對象。
Code: var j = jQuery.noConflict(); // 使用 jQuery 的代碼 j("div p").hide(); // 使用其餘庫的 $() 的代碼 $("content").style.display = 'none'; 把jQuery徹底移動到另外一個命名空間的對象上,以下
Code: var dom = {}; dom.query =jQuery.noConflict(true); // 使用新 jQuery 的代碼 dom.query("div p").hide(); // 使用其餘庫的 $() 的代碼 $("content").style.display = 'none'; // 使用 jQuery 的代碼 jQuery("div > p").hide();