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 )
发表评论