/**
* @author wsf javascript工具类
*/
;
(function (win){
/**
* js工具类
*/
function jsUtils (){
//TODO 可以初始化一些必要的信息
}
/**
* utils 原型对象
*/
jsUtils.prototype = {
constructor:jsUtils,
//判断对象类型
_is:function (type,val){
return Object.prototype.toString.call(val) == '[object '+type+']';
},
//是否是数组
isArray:function (val){
return this._is("Array", val);
},
//是否是arguments对象
isArgs:function (val){
return this._is("Arguments", val);
},
//是否是函数
isFunction:function (val){
return this._is("Function", val);
},
//是否是正则表达式
isRegExp:function (val){
return this._is("RegExp", val);
},
//是否是本地JSON对象
isJSON:function (val){
return window.JSON&&this._is("JSON", val);
},
//是否是undefined
isUndefined:function (val){
return typeof val == "undefined";
},
//是否是空
isNull:function (val){
return val == null;
},
//判断是否为空或nul
isBlank:function (val){
if(this.isNull(val)||this.isUndefined(val)) return true;
var _v = val.trim ? val.trim():val.replace(/^(\s*)|(\s*$)/g,"");
return _v.length==0;
},
//null或空字符窜或undefined
isEmpty:function (val){
return this.isBlank(val);
},
//函数柯里化
curry:function (fn){
var args = Array.prototype.slice.call(arguements,1);
return function (){
var inArgs = Array.prototype.slice.call(arguements);
var finalArgs = args.concat(inArgs);
return fn.apply(null,finalArgs);
}
},
//绑定事件
bind:function (fn,context){
var args = Array.prototype.slice.call(arguements,2);
return function (){
var inArgs = Array.prototype.slice.call(arguements);
var finalArgs = args.concat(inArgs);
return fn.apply(context,finalArgs);
}
},
//函数节流
throttle:function (method,interval,context){
if(typeof method.tid != "undefined")
clearTimeout(method.tid);//清除计时器id
method.tid = setTimeout(function (){
method.call(context);
},interval);
},
//定时器
timer:function (fn,interval,onOrmore){
if(this.isFunction(fn)){
var _f = this.isEmpty(onOrmore);//是否执行多次
if(_f||(!_f&&onOrmore == "one")){
fn.timerid = setTimeout(fn,interval);
}else{
//执行多次
fn.timerid = setTimeout(function (){
fn();
setTimeout(arguments.callee,interval);
},interval);
}
}else{
throw new Error("定时器参数有误!");
}
},
//获得url参数信息
getUrlQueryParam:function (_url,key){
if (_url.lastIndexOf("?") != -1) {
var queryStr = _url.substring(_url.lastIndexOf("?") + 1, _url.length);
if(!key)
return queryStr;// 返回所有参数
else{
var params = queryStr.split("&");
for(var j = 0 ;j < params.length;j++){
var tmp = params[j].split("=");
if(tmp[0]==key){
return tmp[1];
break;
}
}
}
}
},
//javascript事件工具类
eventUtil:{
//添加事件
addHandler:function (element,type,handler){
if(element.addEventListener){
element.addEventListener(type,handler,false);//ie9+,ff,chrome
}else if(element.attachEvent){
element.attachEvent("on"+type,handler);//ie8以下
}else{
element["on"+type] = handler;//其他
}
},
//移除事件
removeHandler:function (element,type,handler){
if(element.removeEventListener){
element.removeEventListener(type,handler,false);
}else if(element.detachEvent){
element.detachEvent("on"+type,handler);
}else{
element["on"+type] = null;
}
},
//获取event对象
getEvent:function (event){
return event?event:w.event;
},
//获取target对象
getTarget:function (event){
return event.target || event.srcElement;
},
//阻止冒泡
preventDefault:function (event){
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue = false;
}
}
},
//js自定义事件
customEvent:{
//创建自定义对象
create:function (){
//event对象
function Event(){
this.handlers={};//事件集合
};
//自定义事件原型对象
Event.prototype={
//构造函数
constructor:Event,
//注册事件
addHandler:function (type,handler){
if(typeof this.handlers[type] == "undefined"){
this.handlers[type] = [];
}
this.handlers[type].push(handler);//注册事件
},
//触发事件
trigger:function (event){
if(!event.target){
event.target = this;
}
if(this.handlers[event.type] instanceof Array){
var handlers = this.handlers[event.type];
for(var i = 0 ,len = handlers.length;i<len;i++){
handlers[i](event);//调用
}
}
},
//移除事件
removeHandler:function (type,handler){
if(this.handlers[type] instanceof Array){
var handlers = this.handlers[type];
for(var i = 0,len = handlers.length;i<len;i++){
if(handlesr[i] == handler){
break;
}
}
handlers.splice(i,1);//移除
}
}
}
return new Event();//返回自定义事件对象
}
},
//去掉千分号
removeThousandSign:function (num){
if(null != num)
return num.replace(/,/g,"");
},
//添加千分号
addThousandSign:function (num){
num = num + "";
num = removePerThousandSign(num);
num = parseFloat(num).toFixed(2);//四舍五入保留两位小数
if(isNaN(num))
return "0.0";
var flag = num.indexOf(".") > 0;//是否有小数点
var regexStr = /(\d{1,3})(?=(\d{3})+(?:$|\.))/g;
var resultStr = num.replace(regexStr, "$1,");
return flag ? resultStr : resultStr+".00";
}
}
win.jsUtils = jsUtils;//赋给全局对象
})(window);