js 的工具类

**
 * 整个body显示半透明的遮罩层
 */
function showWindow(){
	var mask=document.createElement("div");
	var W=$(document).width();
	var H=$(document).height();
	mask.id="mask";
	mask.style.cssText="position:absolute;z-index:5;width:"+W+"px;height:"+H+"px;background:#000;filter:alpha(opacity=30);opacity:0.3;top:0;left:0;";
	document.body.appendChild(mask);
}

/**
 * 给指定的div显示半透明的遮罩层
 * params param 是class(needModal)
 */
function showModal(param,isAll){
	var array = $(param);
	if(array && array.length > 0){
		for(var i = 0 ;i< array.length; i++){
			var mask=document.createElement("div");
			var W1 = 0;
			var H1 = 30;
			if(!isAll){
				W1 = 16;//留出滚动条(让滚动条能够不被覆盖,可以拖动,费率参数页面)
				H1 = 30;//让费率参数页面彻底被覆盖(由于有滚动条,因此被覆盖的div的实际大小会超出范围)
			}
			var W=$(array[i]).width()-W1;
			var H=$(array[i]).height()+H1;
			mask.id="mask";
			mask.style.cssText="position:absolute;z-index:5;width:"+W+"px;height:"+H+"px;background:#000;filter:alpha(opacity=30);opacity:0.3;top:0;left:0;";
			$(array[i]).append(mask);
		}
	}
}

/**
 * 清除显示半透明的遮罩层
 * params param 是class(needModal)
 */
function clearModal(param){
	var array = $(param);
	if(array && array.length > 0){
		for(var i = 0 ;i< array.length; i++){
			$(array[i]).find('#mask').remove();
		}
	}
}

/**
 * 给指定的div显示半透明的遮罩层
 * params param 是class(needModal)
 */
function showModalForDjcsPage(param){
	var array = $(param);
	if(array && array.length > 0){
		for(var i = 0 ;i< array.length; i++){
			var mask=document.createElement("div");
			var W=$(array[i]).width();
			var H=$(array[i]).height();
			mask.id="mask";
			mask.style.cssText="position:absolute;z-index:5;width:"+W+"px;height:"+H+"px;background:#000;filter:alpha(opacity=30);opacity:0.3;top:0;left:0;";
			$(array[i]).append(mask);
		}
	}
}
function showModalForWidth(param){
	var array = $(param);
	var width = 0;
	if(array && array.length > 0){
		for(var i = 0 ;i< array.length; i++){
			var mask=document.createElement("div");
			//设定遮罩层所占的宽度
			var W=$(array[i]).width();
			var H=$(array[i]).height()+30;
			mask.id="mask"+[i];
			//设定遮罩层的绝对位置的起始点(从哪里开始遮罩层--->left属性,遮罩层的宽度等于该元素的宽度)
//			width = W+width;
			//1.<div class="needModal">这个是能够的,可是须要每一个要添加覆盖层的区域都须要套上一个div,并且要给这个div添加上class="needModal",在给这个元素添加遮罩层的时候,由于它没有relative属性,因此添加的时候是从左侧left=0开始添加遮罩层
//			mask.style.cssText="position:absolute;z-index:5;width:"+W+"px;height:"+H+"px;background:#000;filter:alpha(opacity=30);opacity:0.3;top:0;left:"+W+";";
			//2.给该覆盖层加上relative样式:<div class="needModal" style="position: relative;">,那么在给该元素添加遮罩层的时候,absolute绝对定位会从当前的这个元素(position: relative)开始添加遮罩层,而不是从左侧添加遮罩层
			mask.style.cssText="position:absolute;z-index:5;width:"+W+"px;height:"+H+"px;background:#000;filter:alpha(opacity=30);opacity:0.3;top:0;left:0;";
			$(array[i]).append(mask);
		}
	}
}

/**
 * 将数字每三位分割
 * @param num
 * @returns
 */
function formatNumber(num) {
    if (!/^(\+|-)?(\d+)(\.\d+)?$/.test(num)) {
        return num;
    }
    var a = RegExp.$1, b = RegExp.$2, c = RegExp.$3;
    var re = new RegExp("(\\d)(\\d{3})(,|$)");
    while (re.test(b))   b = b.replace(re, "$1,$2$3");
    var value = addChineseUnit(num, 5);
    var content = '';   
    var abValue = value +'';   
    if(value != undefined){      
//    	if(value.length>=22) {         
//    		abValue = value.substring(0,19) + "...";         
//    		content = '<a href="javascript:;"  title="' + chineseUnit + '" class="easyui-tooltip">' + abValue + '</a>';      
//    	}else{         
//    		content = '<a href="javascript:;"  title="' + abValue + '" class="easyui-tooltip">' + abValue + '</a>';      
//    	}   
    	content = '<a href="#" title="' + value + '" class="easyui-tooltip easyui-linkbutton" style="text-decoration: none">' + (a + "" + b + "" + c) + '</a>';
    }   
    return content;
}

/**
 * 为数字加上单位:万或亿
 *
 * 例如:
 *      1000.01 => 1000.01
 *      10000 => 1万
 *      99000 => 9.9万
 *      566000 => 56.6万
 *      5660000 => 566万
 *      44440000 => 4444万
 *      11111000 => 1111.1万
 *      444400000 => 4.44亿
 *      40000000,00000000,00000000 => 4000万亿亿
 *      4,00000000,00000000,00000000 => 4亿亿亿
 *
 * @param {number} number 输入数字.
 * @param {number} decimalDigit 小数点后最多位数,默认为2
 * @return {string} 加上单位后的数字
 */
function addChineseUnit(number, decimalDigit) {
    var addWan = function(integer, number, mutiple, decimalDigit) {
        var digit = getDigit(integer);
        if (digit > 3) {
            var remainder = digit % 8;
            if (remainder >= 5) {   // ‘十万’、‘百万’、‘千万’显示为‘万’
                remainder = 4;
            }
            return Math.round(number / Math.pow(10, remainder + mutiple - decimalDigit)) / Math.pow(10, decimalDigit) + '万';
        } else {
            return Math.round(number / Math.pow(10, mutiple - decimalDigit)) / Math.pow(10, decimalDigit);
        }
    };

    var getDigit = function(integer) {
        var digit = -1;
        while (integer >= 1) {
            digit++;
            integer = integer / 10;
        }
        return digit;
    };

    return function(number, decimalDigit) {
        decimalDigit = decimalDigit == null ? 2 : decimalDigit;
        var integer = Math.floor(number);
        var digit = getDigit(integer);
        // ['个', '十', '百', '千', '万', '十万', '百万', '千万'];
        var unit = [];
        if (digit > 3) {
            var multiple = Math.floor(digit / 8);
            if (multiple >= 1) {
                var tmp = Math.round(integer / Math.pow(10, 8 * multiple));
                unit.push(addWan(tmp, number, 8 * multiple, decimalDigit));
                for (var i = 0; i < multiple; i++) {
                    unit.push('亿');
                }
                return unit.join('');
            } else {
                return addWan(integer, number, 0, decimalDigit);
            }
        } else {
            return number;
        }
    }(number, decimalDigit);
}

/**
 * 加入遮盖层
 * @returns
 */
function setModulFun(){
	var mask=document.createElement("div");
	var W=$('document').width()-16;
	var H=$('document').height()+30;
	mask.id="modulMask";
	mask.style.cssText="position:absolute;z-index:9999;width:100%;height:100%;background:#ccc;filter:alpha(opacity=30);opacity:0.3;top:0;left:0;";
	document.body.appendChild(mask);
}

/**
 * 结束遮盖
 * @returns
 */
function endModulFun(){
	$('#modulMask').remove();
}

/**
 * 删除菜单
 * @param name
 * @param menuId
 */
function deleteMenu(name,menuId){
	var item = $(menuId).menu('findItem', name);
	if(item){
		$(menuId).menu('removeItem', item);
	}
}

/**
 * 添加菜单
 * @param name
 * @param fun
 * @param menuId
 */
function addMenu(name,fun,menuId,iconCls){
	var item = $(menuId).menu('findItem', name);
	if(!item){
		$(menuId).menu('appendItem', {
			text: name,
			iconCls: iconCls,
			onclick: fun,
		});
	}
}

/**  
 * layout方法扩展  
 * @param {Object} jq  
 * @param {Object} region  
 */  
$.extend($.fn.layout.methods, {   
    /**  
     * 面板是否存在和可见  
     * @param {Object} jq  
     * @param {Object} params  
     */  
    isVisible: function(jq, params) {   
        var panels = $.data(jq[0], 'layout').panels;   
        var pp = panels[params];   
        if(!pp) {   
            return false;   
        }   
        if(pp.length) {   
            return pp.panel('panel').is(':visible');   
        } else {   
            return false;   
        }   
    },   
    /**  
     * 隐藏除某个region,center除外。  
     * @param {Object} jq  
     * @param {Object} params  
     */  
    hidden: function(jq, params) {   
        return jq.each(function() {   
            var opts = $.data(this, 'layout').options;   
            var panels = $.data(this, 'layout').panels;   
            if(!opts.regionState){   
                opts.regionState = {};   
            }   
            var region = params;   
            function hide(dom,region,doResize){   
                var first = region.substring(0,1);   
                var others = region.substring(1);   
                var expand = 'expand' + first.toUpperCase() + others;   
                if(panels[expand]) {   
                    if($(dom).layout('isVisible', expand)) {   
                        opts.regionState[region] = 1;   
                        panels[expand].panel('close');   
                    } else if($(dom).layout('isVisible', region)) {   
                        opts.regionState[region] = 0;   
                        panels[region].panel('close');   
                    }   
                } else {   
                    panels[region].panel('close');   
                }   
                if(doResize){   
                    $(dom).layout('resize');   
                }   
            };   
            if(region.toLowerCase() == 'all'){   
                hide(this,'east',false);   
                hide(this,'north',false);   
                hide(this,'west',false);   
                hide(this,'south',true);   
            }else{   
                hide(this,region,true);   
            }   
        });   
    },   
    /**  
     * 显示某个region,center除外。  
     * @param {Object} jq  
     * @param {Object} params  
     */  
    show: function(jq, params) {   
        return jq.each(function() {   
            var opts = $.data(this, 'layout').options;   
            var panels = $.data(this, 'layout').panels;   
            var region = params;   
  
            function show(dom,region,doResize){   
                var first = region.substring(0,1);   
                var others = region.substring(1);   
                var expand = 'expand' + first.toUpperCase() + others;   
                if(panels[expand]) {   
                    if(!$(dom).layout('isVisible', expand)) {   
                        if(!$(dom).layout('isVisible', region)) {   
                            if(opts.regionState[region] == 1) {   
                                panels[expand].panel('open');   
                            } else {   
                                panels[region].panel('open');   
                            }   
                        }   
                    }   
                } else {   
                    panels[region].panel('open');   
                }   
                if(doResize){   
                    $(dom).layout('resize');   
                }   
            };   
            if(region.toLowerCase() == 'all'){   
                show(this,'east',false);   
                show(this,'north',false);   
                show(this,'west',false);   
                show(this,'south',true);   
            }else{   
                show(this,region,true);   
            }   
        });   
    }   
}); 
/**
 * 隐藏被禁用的菜单
 * @param jq
 */
function getContentMenuFun(jq){
	var menuDom = jq.parent().find(".menu-top.menu:visible");
	var $item = menuDom.children(".menu-item-disabled");
	var $sep = menuDom.find('.menu-sep');
	if($item.length >0 ){
		$item.hide();
		menuDom.height(menuDom.height() - $item.length*22);
		menuDom.next().remove();
	}
	if($sep.length >0){
		for(var i = $sep.length-1;i>=0;i--){
			var $current = $($sep[i]);
			removeTogetherMenuSepFun($current,menuDom);
		}
	}
}


/**
 * 移除多余的菜单分隔符
 * @param current
 * @param menuDom
 * @param falg 用来标记两个分割线之间有没有正常可见的菜单项
 */
function removeTogetherMenuSepFun($current,menuDom){
	var $prevAll = $current.prevAll();
	if($prevAll){
		var flag = false;//假设该分割线是要隐藏的
		for(var i = 0;i<$prevAll.length;i++){
			var prevDom = $prevAll[i];
			if($(prevDom).hasClass("menu-sep")){
				break;
			}
			if($(prevDom).is(':visible')){
				flag = true;
			}
		}
		if(!flag){
			$current.hide();
		}
	}
}

function hidenOrShowMenuFun(easyuiDom,isTree,row,$dom,dblClickRowMenuIndex){
	var menuObj = createMenu(true);
	var newMenu = hiddenRightMenu(menuObj,row,dblClickRowMenuIndex,easyuiDom);
	easyuiDom.treegrid('options').rowContextMenu = newMenu;
	if($dom && $dom.length > 0){
		newMenu = hiddenRightMenu($dom.menu("options").items);
		$dom.menu("options").items = newMenu;
	}
}

function hiddenRightMenu(oldMenu,row,dblClickRowMenuIndex,easyuiDom){
	if(oldMenu){
		var text = null;
		for(var i = oldMenu.length-1;i >= 0;i--){
			if(oldMenu[i].disabled && $.isFunction(oldMenu[i].disabled)){
				var disable = oldMenu[i].disabled(null,row);
				if(typeof(menuFlag) != 'undefined' && menuFlag){
					oldMenu[0].children[1].text = "子预算文件";
				}
				if(disable){
					oldMenu.splice(i, 1);
				}
				if(dblClickRowMenuIndex && dblClickRowMenuIndex == i){
					if(disable){
						easyuiDom.treegrid('options').dblClickRowMenuIndex = undefined;
						continue;
					}
					text = oldMenu[i];
				}
			}
		}
		if(text){
			for(var i = 0;i < oldMenu.length;i++){
				if(oldMenu[i] == text){
					easyuiDom.treegrid('options').dblClickRowMenuIndex = i;
				}
			}
		}
	}
	return oldMenu;
} 

/**
 * 初始化菜单项 
 */
function setMenuHeight(){
	var menus = $('.menu');
	for(var i = 0;i < menus.length;i++){
		var $menu = $(menus[i]);
		var menuHeight = $menu.height();
		var items = $menu.find('.menu-item:not([style*="display: none"])');
		if(items.length > 0 && menuHeight == 0){
			var unitHeight = 22;
			$menu.height(unitHeight*items.length+"px");
		}
	}
}

/**
 * 字段悬浮提示的通常方法
 * @param title 超连接悬浮显示的内容
 * @param contentVal 超连接文本中内容
 */
function defaultFormatter(title,contentVal){
	var returnVal = "";
	if(!contentVal){
		contentVal = title;
	}
	returnVal = '<a href="#" title="' + value + '" style="text-decoration: none;color:#000000;cursor:default;" class="easyui-tooltip easyui-linkbutton">' + contentVal + '</a>';
	return returnVal;
}

/** 
 * js截取字符串,中英文都能用 
 * @param str:须要截取的字符串 
 * @param len: 须要截取的长度 
 */
function cutstr(str, len) {
    var str_length = 0;
    var str_len = 0;
    str_cut = new String();
    str_len = str.length;
    for (var i = 0; i < str_len; i++) {
        a = str.charAt(i);
        str_length++;
        if (escape(a).length > 4) {
            //中文字符的长度经编码以后大于4  
            str_length++;
        }
        str_cut = str_cut.concat(a);
        if (str_length >= len) {
            str_cut = str_cut.concat("...");
            return str_cut;
        }
    }
    //若是给定字符串小于指定长度,则返回源字符串;  
    if (str_length < len) {
        return str;
    }
}

/**
 * 得到字符串实际长度,中文2,英文1</summary>
 */
var GetLength = function (str) {
    ///<param name="str">要得到长度的字符串</param>
    var realLength = 0, len = str.length, charCode = -1;
    for (var i = 0; i < len; i++) {
        charCode = str.charCodeAt(i);
        if (charCode >= 0 && charCode <= 128) realLength += 1;
        else realLength += 2;
    }
    return realLength;
};

//除法函数,用来获得精确的除法结果
//说明:javascript的除法结果会有偏差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
//调用:accDiv(arg1,arg2)
//返回值:arg1除以arg2的精确结果
function accDiv(arg1,arg2){
	var t1=0,t2=0,r1,r2;
	try{
		t1=arg1.toString().split(".")[1].length;
	}catch(e){
	}
	try{
		t2=arg2.toString().split(".")[1].length;
	}catch(e){
	}
	with(Math){
		r1=Number(arg1.toString().replace(".",""));
		r2=Number(arg2.toString().replace(".",""));
		return (r1/r2)*pow(10,t2-t1);
	}
}

//给Number类型增长一个div方法,调用起来更加方便。
Number.prototype.div = function (arg){
	return accDiv(this, arg);
}

//乘法函数,用来获得精确的乘法结果
//说明:javascript的乘法结果会有偏差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
//调用:accMul(arg1,arg2)
//返回值:arg1乘以arg2的精确结果
function accMul(arg1,arg2){
	var m=0,s1=arg1.toString(),s2=arg2.toString();
	try{
		m+=s1.split(".")[1].length;
	}catch(e){
	}
	try{
		m+=s2.split(".")[1].length;
	}catch(e){
	}
	return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m);
}

//给Number类型增长一个mul方法,调用起来更加方便。
Number.prototype.mul = function (arg){
	return accMul(arg, this);
}

//加法函数,用来获得精确的加法结果
//说明:javascript的加法结果会有偏差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
//调用:accAdd(arg1,arg2)
//返回值:arg1加上arg2的精确结果
function accAdd(arg1,arg2){
	var r1,r2,m;
	try{
		r1=arg1.toString().split(".")[1].length;
	}catch(e){
		r1=0;
	}
	try{
		r2=arg2.toString().split(".")[1].length;
	}catch(e){
		r2=0;
	}
	m=Math.pow(10,Math.max(r1,r2));
	return (arg1*m+arg2*m)/m;
}

//给Number类型增长一个add方法,调用起来更加方便。
Number.prototype.add = function (arg){
	return accAdd(arg,this);
}

/**
 * 获取新的url
 * @param obj 新的参数值构成的对象
 * @returns
 */
function getNewUrlParms(url,obj)    {
	 var theRequest = new Object();
     if (!url)
         url = location.href;
     if (url.indexOf("?") !== -1)
     {
         var str = url.substr(url.indexOf("?") + 1) + "&";
         var strs = str.split("&");
         for (var i = 0; i < strs.length - 1; i++)
         {
             var key = strs[i].substring(0, strs[i].indexOf("="));
             var val = strs[i].substring(strs[i].indexOf("=") + 1);
             theRequest[key] = val;
         }
     }
     for(var key in obj){
    	 theRequest[key] = obj[key];
     }
     var head = url.substr(0,url.indexOf("?"));
     var appendUrl = $.param(theRequest);
     var newUrl = head+"?"+appendUrl;
     return newUrl;
}

/**
 * 判断字符串是否以指定字符结尾
 */
String.prototype.endWith=function(endStr){
	  var d=this.length-endStr.length;
	  return (d>=0&&this.lastIndexOf(endStr)==d);
}

/**
 * 判断是否为中文
 * @param s
 * @returns
 */
function isChina(s){  //判断字符是不是中文字符 
	var patrn= /[\u4E00-\u9FA5]|[\uFE30-\uFFA0]/gi; 
	if (!patrn.exec(s)) { 
		return false; 
	}else{ 
		return true; 
	} 
} 

/**
 * 若是数字以0开头,那么去除前面的0
 * 若是是算式,那么返回算式的值
 * @param formula
 * @param cale
 * @returns
 */
function parseNumFun(formula,cale){
	var returnVal = formula;
	var reg=/^0*\d+(\.\d+)?$/;
	if(!reg.test(formula)){
		//非数字或者非以0开头的数字
		returnVal = parseFloat(eval("("+formula+")")).toFixed(cale)
	}else{
		if(formula.indexOf("0") == 0){
			//若是以"0"开头
			formula = (~~formula);
		}else{
			//若是不是以0开头,而是正常的数字
			returnVal = formula;
		}
	}
	returnVal = parseFloat(returnVal);
	return returnVal;
}

/**
 * 判断一个对象是否没有自定义属性,为一个空对象
 * @returns
 */
function isEmptyObj(obj){
	return JSON.stringify(obj) == '{}';
}
相关文章
相关标签/搜索