/**
* 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, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').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,"<").replace(/>/g,">");
}
分享到:
相关推荐
基于Rhino引擎的低侵入式JavaScript内置对象扩展方法.pdf
Date对象扩展,包括常用中文日期格式解析、加减操作、日期差、周操作和季操作。具体扩展的方法如下: parseCHS--静态方法。解析常用的中文日期并返回日期对象。 add--日期加减操作。[注:此函数在上传时还存在...
javascript Prototype 对象扩展.docx
lang.js是Javascript面向对象编程的扩展库,支持包、类的定义和函数重载等功能,接口简洁规范,易用性强,压缩包内包含文档示例和带注释的源码,欢迎下载试用。
ExtJs2.0学习系列(1)--Ext.MessageBox
基于安卓平台的JavaScript扩展对象实现方法及绑定接口结构
背景:JavaScript中Array对象的标准方法中,没有indexOf()方法,可通过下面的代码扩展。 代码如下: if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(elt) { var len = this.length >>> 0; var ...
T16.3_JavaScript自定义对象与扩展 java 经典教程 经典教材
android中一种在C层扩展js对象的步骤说明及源码
Javascript是基于对象的脚本语言,理所当然会有对象概念的存在,通常我们在项目中都是运用“function fnname{…..}”的形式直接声明一个方法,再去调用。这么做很方便。但是如果你的项目中拥有频繁的JS操作,比如...
Date对象扩展,包括常用中文日期格式解析、加减操作、日期差、周操作和季操作。
de.js是一个轻量级的javascript扩展函数库,通过扩展页面元素的方法和属性、和扩展javascript内置类型的方法来帮助web前端开发人员实现更便捷和高效的编程。以下是主要特点: 支持类似jquery的选择器,同时支持类似...
有时候我们需要对js的array对象扩展一些功能,这里简单介绍下,方便需要的朋友
Javascript当然也不例外,可是关于对象的引用问题,你考虑过么?通常的做法是一系列对象共享类的方法,而不是为每个对象复制一份函数。下面看看为每个对象复制一份函数的做法。 代码如下:var myobject=function...
Javascript String对象扩展HTML编码和解码的代码
js-validator 是 Laravel 风格的 JavaScript 对象验证库。使用 js-validator 来验证对象或者 JSON 是否符合规则非常方便,而且具有很好的可扩展性。举个例子var example = { text: 'Hello world!', date: ...
同洲中间件机顶盒web开发参考规范,里面有直播、点播等同洲自定义接口
现在要实现的是:原生js实现复制对象,扩展对象,类似jq中的extend()方法,具体实例如下: 现有3个对象字面量: var o1={hello:1,old:555}, o2 = { abc: 55555555, hello: 2, fun: function() { alert(111)...
主要介绍了详解JS中Array对象扩展与String对象扩展的相关资料,需要的朋友可以参考下