第2606天:重写discuz的$,避免和jQuery冲突

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 :D

RSS

上一篇:

下一篇:

发表评论

电子邮件地址不会被公开。 必填项已用*标注