discuz 的 common.js 中有个 $ 的函数,和 jquery 冲突
function $(id) {
return !id ? null : document.getElementById(id);
}
重写 $
注:以下方法建议只在 wap 页中使用,PC 版坑太多,建议使用 var Q=jQuery 的全局变量,或者直接使用 jQuery.
// 用于选择器
function $(id) {
if(!id) return null;
var rep = /^[a-zA-Z0-9_-]+$/;
// 加了 'object' 的判断,否则管理员删帖弹层会报错
// 所以 jquery 不要用 $({}) 的写法
if(rep.test(id) || typeof(id) === 'object') {
// 如果传入的 id 是字母、数字、中划线、下划线,则返回 discuz 选择器
return document.getElementById(id);
} else {
// 否则返回 jquery 选择器
if (window.jQuery) {
return jQuery(id);
}
}
}
// 用于jquery扩展,例如 $.ajax 等
if (window.jQuery) {
jQuery.extend($, jQuery);
$.prototype = jQuery.prototype;
}
再修改 common_extra.js,找到 function slideshow (626行),把
if(!el.id) el.id = Math.random();
改成
if(!el.id) el.id = Math.round(Math.random()*10000);
这样改的原因是在 common_extra.js 的 842 行有一句 var percentEle = $(this.id+’_percent’); 而 Math.random() 会返回小数点。
现在,如果要在 discuz 的 js 中用 jquery 的选择器,也可以直接用 $ 了。
有个注意点,不要直接使用类似于 $(‘h2′) 这种标签选择器,可以在标签前加个样式,例如 $(‘.js-myclass h2′)
(感谢德来、劲风、nino )