js常用的对象扩展方法

转自:http://gaojunwei.iteye.com/blog/2276757

js常用的对象扩展方法

/** 
 * js bug:解决 javascript 的 小数截取的bug。<br> 
 * bug: alert(parseFloat(0.006).toFixed(2)); 显示 0.00 修改后显示 0.01 
 */  
Number.prototype.toFixed = function(d) {  
    var s = this + "";  
    if (!d)  
        d = 0;  
    if (s.indexOf(".") == -1)  
        s += ".";  
    s += new Array(d + 1).join("0");  
    if (new RegExp("^(-|\\+)?(\\d+(\\.\\d{0," + (d + 1) + "})?)\\d*$").test(s)) {  
        var s = "0" + RegExp.$2, pm = RegExp.$1, a = RegExp.$3.length, b = true;  
        if (a == d + 2) {  
            a = s.match(/\d/g);  
            if (parseInt(a[a.length - 1]) > 4) {  
                for ( var i = a.length - 2; i >= 0; i--) {  
                    a[i] = parseInt(a[i]) + 1;  
                    if (a[i] == 10) {  
                        a[i] = 0;  
                        b = i != 1;  
                    } else  
                        break;  
                }  
            }  
            s = a.join("").replace(new RegExp("(\\d+)(\\d{" + d + "})\\d$"),  
                    "$1.$2");  
        }  
        if (b)  
            s = s.substr(1);  
        return (pm + s).replace(/\.$/, "");  
    }  
    return this + "";  
};  

// 给Number类型增加四则运算  
/** 
 * js bug:js四则运算小数精度丢失的bug修复。例如:1.5451+0.34133 
 * 按理来说应该是等于1.88643,结果JS给计算时居然算成1.88629999999998了 调用方法 
 */  
/** 
 * 加法:1.5451+0.34133 的调用方法为:var s = (1.5451).add(0.34133).toFixed(2); 
 * alert((7.1).add(12.00027)+"="+(7.1+12.00027)); 
 */  
Number.prototype.add = function(arg) {  
    var bit1, bit2, m;  
    try {  
        bit1 = arg.toString().split(".")[1].length;  
    } catch (e) {  
        bit1 = 0;  
    }  
    try {  
        bit2 = this.toString().split(".")[1].length;  
    } catch (e) {  
        bit2 = 0;  
    }  
    m = Math.pow(10, Math.max(bit1, bit2));  
    return (this * m + arg * m) / m;  
};  
/** 
 * 减法: 1.5451-0.34133 的调用方法为:var s = (1.5451).sub(0.34133); 
 */  
Number.prototype.sub = function(arg) {  
    var bit1, bit2;  
    try {  
        bit1 = arg.toString().split(".")[1].length;  
    } catch (e) {  
        bit1 = 0;  
    }  
    try {  
        bit2 = this.toString().split(".")[1].length;  
    } catch (e) {  
        bit2 = 0;  
    }  
    var n = Math.max(bit1, bit2);  
    var m = Math.pow(10, n);  
    return Number(((this * m - arg * m) / m).toFixed(n));  
};  
/** 
 * 乘法: 1.5451*0.34133 的调用方法为:var s = (1.5451).mul(0.34133).toFixed(3); 
 */  
Number.prototype.mul = function(arg) {  
    var bit1, bit2;  
    try {  
        bit1 = arg.toString().split(".")[1].length;  
    } catch (e) {  
        bit1 = 0;  
    }  
    try {  
        bit2 = this.toString().split(".")[1].length;  
    } catch (e) {  
        bit2 = 0;  
    }  
    var m = bit1 + bit2;  
    // var n = (bit1 > bit2) ? bit1 : bit2;  
    return (Number(this.toString().replace(".", ""))  
            * Number(arg.toString().replace(".", "")) / Math.pow(10, m));// .toFixed(n);  
};  
/** 
 * 除法: 1.5451/0.34133 的调用方法为:var s = (1.5451).div(0.34133).toFixed(3); 
 */  
Number.prototype.div = function(arg) {  
    var bit1, bit2;  
    try {  
        bit1 = arg.toString().split(".")[1].length;  
    } catch (e) {  
        bit1 = 0;  
    }  
    try {  
        bit2 = this.toString().split(".")[1].length;  
    } catch (e) {  
        bit2 = 0;  
    }  
    var n = Math.max(bit1, bit2);  
    var m = Math.pow(10, n);  
    // return (Number(this.toString().replace(".", ""))*m) /  
    // (Number(arg.toString().replace(".", ""))*m);  
    return ((this * m) / (arg * m));  
};  

// 给String对象增加四则运算  
/** 
 * 加法:1.5451+0.34133 的调用方法为:var s = (1.5451).add(0.34133).toFixed(2); 
 * alert((7.1).add(12.00027)+"="+(7.1+12.00027)); 
 */  
String.prototype.add = function(arg) {  
    return Number(this).add(arg);  
};  
/** 
 * 减法: 1.5451-0.34133 的调用方法为:var s = (1.5451).sub(0.34133); 
 */  
String.prototype.sub = function(arg) {  
    return Number(this).sub(arg);  
};  
/** 
 * 乘法: 1.5451*0.34133 的调用方法为:var s = (1.5451).mul(0.34133).toFixed(3); 
 */  
String.prototype.mul = function(arg) {  
    return Number(this).mul(arg);  
};  
/** 
 * 除法: 1.5451/0.34133 的调用方法为:var s = (1.5451).div(0.34133).toFixed(3); 
 */  
String.prototype.div = function(arg) {  
    return Number(this).div(arg);  
};  
/** 
 * 处理html转义 调用方法为:var s = "aaa".escape("aaa"); 
 */  
String.prototype.escape = function (html){  
    var codeSpan = /(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm;  
    var codeBlock = /(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=~0))/g;  
    var spans = [];  
    var blocks = [];  
    var text = String(html).replace(/\r\n/g, '\n').replace('/\r/g', '\n');  
    text = '\n\n' + text + '\n\n';  
    texttext = text.replace(codeSpan, function(code){  
        spans.push(code);  
        return '`span`';  
    });  
    text += '~0';  
    return text.replace(codeBlock, function(code){  
        blocks.push(code);  
        return '\n\tblock';  
    }).replace(/&(?!\w+;)/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/`span`/g, function(){  
        return spans.shift();  
    }).replace(/\n\tblock/g, function(){  
        return blocks.shift();  
    }).replace(/~0$/, '').replace(/^\n\n/, '').replace(/\n\n$/, '');  
};  

// 等比例缩放图片  
//var flag = false;  
/** 
 * ImgD:原图 maxWidth:允许的最大宽度 maxHeight:允许的最大高度 
 */  
function resizeimg(ImgD, maxWidth, maxHeight) {  
    //ImgD.style.display="none"; //隐藏加到这儿不管用,应该放到img标签中  
    var image = new Image();  
    var iwidth = maxWidth; // 定义允许图片宽度  
    var iheight = maxHeight; // 定义允许图片高度  
    image.src = ImgD.src;  
    if (image.width > 0 && image.height > 0) {  
        //flag = true;  
        if (image.width / image.height >= iwidth / iheight) {  
            if (image.width > iwidth) {  
                ImgD.width = iwidth;  
                ImgD.height = (image.height * iwidth) / image.width;  
            } else {  
                ImgD.width = image.width;  
                ImgD.height = image.height;  
            }  
            //ImgD.alt = image.width + "×" + image.height;  
        } else {  
            if (image.height > iheight) {  
                ImgD.height = iheight;  
                ImgD.width = (image.width * iheight) / image.height;  
            } else {  
                ImgD.width = image.width;  
                ImgD.height = image.height;  
            }  
            //ImgD.alt = image.width + "×" + image.height;  
        }  
    }  
    centerImage(ImgD, maxWidth, maxHeight);  
    ImgD.style.display="inline";  
}  
/** 
 * Date:给日期对象添加格式化方法 
 * 使用方法 var date = new Date().format('yyyy-MM-dd') 
 */  
Date.prototype.format = function(format){   
    var o = {  
        "M+" : this.getMonth()+1, //month  
        "d+" : this.getDate(), //day  
        "h+" : this.getHours(), //hour  
        "m+" : this.getMinutes(), //minute  
        "s+" : this.getSeconds(), //second  
        "q+" : Math.floor((this.getMonth()+3)/3), //quarter  
        "S" : this.getMilliseconds() //millisecond  
    }   
    if(/(y+)/.test(format)) {  
        format = format.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));  
    }  
    for(var k in o) {  
        if(new RegExp("("+ k +")").test(format)) {  
            format = format.replace(RegExp.$1, RegExp.$1.length==1 ? o[k] : ("00"+ o[k]).substr((""+ o[k]).length));   
        }  
    }  
    return format;  
}  

/** 
 * 原网址:http://www.cnblogs.com/mingmingruyuedlut/archive/2013/05/19/3082177.html 
 * 扩展 Number 对象 formatMoney()方法(参数:保留小数位数,货币符号,整数部分千位分隔符,小数分隔符): 
 * 调用方法为:var s = (60000).formatMoney(0,"","","");结果为:s = 60,000 
 */  
Number.prototype.formatMoney = function (places, symbol, thousand, decimal) {  
    places = !isNaN(places = Math.abs(places)) ? places : 2;  
    symbol = symbol !== undefined ? symbol : "$";  
    thousand = thousand || ",";  
    decimal = decimal || ".";  
    var number = this,  
        negative = number < 0 ? "-" : "",  
        i = parseInt(number = Math.abs(+number || 0).toFixed(places), 10) + "",  
        j = (j = i.length) > 3 ? j % 3 : 0;  
    return symbol + negative + (j ? i.substr(0, j) + thousand : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thousand) + (places ? decimal + Math.abs(number - i).toFixed(places).slice(2) : "");  
};  

function centerImage(imgD, maxWidth, maxHeight) {  
    // var div = imgD.parentNode;// 获取包含本图片的div不用这个  
    if (imgD.height < maxHeight) {  
        var top = (maxHeight - imgD.height) / 2-2;  
        //ie6不支持这么获取高度,所以ie6下不执行  
        if(imgD.height!=0){  
            imgD.style.marginTop = top + "px";  
        }  
    }  
    if (imgD.width < maxWidth) {  
        var left = (maxWidth - imgD.width) / 2;  
        //ie6不支持这么获取宽度,所以ie6下不执行  
        if(imgD.width!=0){  
            imgD.style.marginLeft = left + "px";  
        }  
    }  
}  
/** 
 * 将字符串格式的日期(如:20150415092645)转换成js Date对象 
 * 注意Date对象的初始化方式 
 * */  
function js_patch_getdate(stime) {  
    var datetime = new Date(  
            parseFloat(stime.substr(0, 4)),  
            parseFloat(stime.substr(4, 2) - 1),  
            parseFloat(stime.substr(6, 2)),  
            parseFloat(stime.substr(8, 2)),  
            parseFloat(stime.substr(10, 2)),  
            parseFloat(stime.substr(12, 2)));  
    return datetime;  
}  
function js_patch_fillZero(num, digit) {  
    var str = '' + num;  
    while (str.length < digit) {  
        str = '0' + str;  
    }  
    return str;  
}     
function debug_showAttr(obj)  
{  
    var str="<b>begin:the attribute of "+obj+"</b><br/>";  
    for(var i in obj)  
    {  
        str+="<b>"+i+"</b>=="+obj[i]+"<br>";  
    }  
    document.body.innerHTML+=str;  
}  
function debug_showMsg(str)  
{  
    document.body.innerHTML+=str;  
}  
function debug_showMsgSrc(str)  
{  
    document.body.innerHTML+=str.replace(/</g,"&lt").replace(/>/g,"&gt");  
}  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值