欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

js常用代码片段

程序员文章站 2022-06-08 17:21:59
...
/*
* 名  称:trim
* 功  能:首尾去空格
* 参  数:str[string]
* 返回值:str[string]
* 注  意:   
*/
function trim(string) { 
	return string.replace(/^\s+|\s+$/g, ''); 
}

/*
* 名  称:hyphens
* 功  能:去除连字符且连字符后面大写
* 参  数:val[string]
* 返回值:val[string]
* 注  意:
*/
function hyphens(val){
	if(typeof val==='string' && val.includes('-')){
		let temp = val.split('-');
		let str = temp[0];
		for(let i=1;i<temp.length; i++){
			str+=temp[i].substring(0,1).toUpperCase()+temp[i].substring(1)
		}
		return str;
	}else{
		return val;
	}
}

/*
* 名  称:find
* 功  能:向上或向下寻找最近的含有特殊自定义属性的DOM
* 参  数:el attr dir[DOM, string, (string)] 
* 返回值:el val [DOM string] 
* 注  意:
*/
 function find(el, attr, dir){
	if(!el){ return};
	if(typeof dir=='undefined'){
		dir = 'parentNode';
	}
	while(!el.getAttribute(attr)){
		el = el[dir];
	}
	let val = el.getAttribute(attr);
	return {el:el,[attr]:val}
}

/*
* 名  称:toArray
* 功  能:将arrlike 转化为真正的数组
* 参  数:一组值(不限长度)
* 返回值:[]
* 注  意:
*/
function toArray(a,b,c){
  return Array.prototype.slice.cinputs(arguments);	
}

/*
* 名  称:checkinputs
* 功  能:实现一组checkbox的全选 全不选 不全选
* 参  数:inputs[list]
* 返回值:void
* 注  意:默认设置inputs的第一个为全选按钮
*/

function checkinputs(inputs, callback){
	isCheckedinputs();	
	//检测是否全选
	function isCheckedinputs(){
		var count = 0;
		for(var i=1;i<inputs.length;i++){
			inputs[i].checked&&count++
		}
		if(count==0){
			inputs[0].checked = false;
		}else if(count<inputs.length-1){
			inputs[0].indeterminate = true;
		}else{
			inputs[0].indeterminate = false; 
			inputs[0].checked = true;
		}
	}
	//全选,全不选
	inputs[0].onclick = function(){
		for(var i=1; i<inputs.length; i++){
			inputs[i].checked = this.checked;
		}
		isCheckedinputs()
	}
	for(var i=1; i<inputs.length; i++){
		inputs[i].onclick = function(){
			isCheckedinputs();
		}
	}
	
	typeof callback ==='Function' && callback()
}

/*
* 名  称:GetLength
* 功  能:获取字符串的长度
* 参  数:str [string]
* 返回值:realLength [number]
* 注  意:
*/
function GetLength(str) {
	if(!str){
		return;
	}else{
	  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;
	}
}

function codePointLength(text){
  var result = text.match(/[\s\S]/gu);
  return result ? result.length : 0;
}

/*
* 名  称:loadXMLDoc
* 功  能:原生ajax封装
* 参  数:obj (url data method success error asyn [string, object, string, funtion, function, boolean])
* 返回值:void
* 注  意:
*/
function loadXMLDoc(obj){
	var XML;
	if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
	  XML=new XMLHttpRequest();
	}else{// code for IE6, IE5
	  XML=new ActiveXObject("Microsoft.XMLHTTP");
	}
	XML.onreadystatechange = function(){
	  if(XML.readyState===4 && XML.status==200){
		var success=XML.responseText;
		obj.success(success);
	  }else if(XML.readyState===4){
		var error=XML.responseText;
		obj.error(error);
	  }
	}
	var param =[];
	for(var i in obj.data){
	  var temp = i+"="+obj.data[i];
	  param.push(temp);
	}
	var url = obj.url +"?"+param.join('&');

	if(typeof obj.asyn =='undefined'){obj.asyn=true};
	XML.open(obj.method.toUpperCase(),url,obj.asyn);

	if(obj.method==='post'){
	  XML.setRequestHeader("Content-type","application/x-www-form-urlencoded");
	}
	XML.send();
}

/*  
* 名  称:whatBoswer
* 功  能:检测当前浏览器的版本
* 参  数:null
* 返回值:boswer [string]  
* 注  意:  
*/  
function whatBoswer(){
	var boswer={
		rv:/rv:([\d.]+)\) like gecko/.test(navigator.userAgent.toLowerCase()), //ie11
		mozilla : /firefox/.test(navigator.userAgent.toLowerCase()),
		webkit :/webkit/.test(navigator.userAgent.toLowerCase()),
		opera : /opera/.test(navigator.userAgent.toLowerCase()),
		msie : /msie/.test(navigator.userAgent.toLowerCase())
	}
	var currentBoswer = '';
	for(var i in boswer){
		if(boswer[i]){
			currentBoswer = i;
			break;
		}
	}
	return currentBoswer;	
}

/*  
* 名  称:whichIe
* 功  能:已知浏览器为ie, 确定ie浏览器类型
* 参  数:null
* 返回值:object
* 注  意:  
*/
function whichIe () {
	var version = 0;
	// 由于高版本ie是向下兼容,所以先从高版本浏览器开始检测
	if(document.documentMode == 11){
		version = 11;  
	}else if('WebSocket' in window){
		version = 10;    
	}else if('HTMLElement' in window){
		version = 9;
	}else if('localStorage' in window){
		version = 8;
	} else if('minHeight' in div.currentStyle){
		version = 7;
	} else{
		version = 6;
		document.execCommad('backgroundimagecache',false,false); //IE6并不会对背景图片进行缓存,故进行修补
	}
	return version;
}

/*  
* 名  称:debounce
* 功  能:给定的时间间隔内事件不会被连续触发(优化性能)
* 参  数:func wait immediate [function,integer, boolean]
* 返回值:void
* 注  意:
*/
function debounce(func, wait, immediate) {
    var timeout;
    return function() {
        var context = this, args = arguments;
        var later = function() {
            timeout = null;
            if (!immediate) func.apply(context, args);
        };
        var callNow = immediate && !timeout;
        clearTimeout(timeout);
        timeout = setTimeout(later, wait);
        if (callNow) func.apply(context, args);
    };
};

/*  
* 名  称:getType
* 功  能:获取数据的类型
* 参  数:obj [object]
* 返回值:type [string]
* 注  意:
*/
function getType(obj){
	var str = Object.prototype.toString.call(obj).split(' ')[1];
		str = temp.substring(0, temp.length-1).toLowerCase();
	return str;
}

/*  
* 名  称:setCompact
* 功  能:设置数字的千分位符
* 参  数:obj [number]
* 返回值:type [number or object]
* 注  意:
*/
function setCompact(a){
	// 判断是不是一个数字
    let isNumber = Object.prototype.toString.call(a).toLowerCase().includes('number');
    let result = a;
    if (isNumber) {
        a += '';  // 将数字转化为字符串
        let [b, c = true] = a.split('.');
        // 记录插入点
        if (b.length >= 2) {
            b = b.split('').reverse();
            for (let i = 0; i < b.length; i++) {
                if (i % 3 === 0 && i !== 0) {
                    b[i] += ',';
                }
            }
            b = b.reverse().join('');
        }
        if (typeof c !== 'boolean') {
            result = b + '.' + c;
        } else {
            result = b;
        }
    }
    return result;	
}

/*  
* 名  称:firstUpperCase
* 功  能:设置首字母大写
* 参  数:str [string]
* 返回值:str [string]
* 注  意:
*/

function firstUpperCase(str) {
  return str.toLowerCase().replace(/( |^)[a-z]/g, (L) => L.toUpperCase());
}

/*  
* 名  称:camelCase
* 功  能:转换含有连字符的字符串为驼峰格式
* 参  数:str [string]
* 返回值:str [string]
* 注  意:
*/
function camelCase (str) {
	return str.replace(/-./g, (s) => {
		return s.toLocaleUpperCase();
	}).split('-').join('');
}

/*  
* 名  称:on
* 功  能:绑定事件
* 参  数:el, eventType,handler [DOM, str, fn]
* 返回值:void
* 注  意:
*/
function on(el, eventType,handler){
	if(el.addEventListener){
		el.addEventListener(eventType, handler)
	}else if(el.attachEvent){
		el.attachEvent('on'+eventType, handler)
	}
}

/*  
* 名  称:off
* 功  能:解除绑定事件
* 参  数:el, eventType,handler [DOM, str, fn]
* 返回值:void
* 注  意:
*/
function off(el,eventType, handler){
	if(el.removeEventListener){
		el.removeEventListener(eventType, handler)
	}else if(el.detachEvent){	
		el.detachEvent('on'+eventType, handler)
	}
}

/*  
* 名  称:fire
* 功  能:触发dom绑定的事件
* 参  数:el, eventType [DOM, str]
* 返回值:void
* 注  意:
*/
function fire (el, eventType){
	//ie 
	if(document.createEventObject){
		var evt = document.createEventObject()
			return el.fireEvent('on'+eventType, evt )
	}else{
		var evt = document.createEvent('HTMLEvents');
		evt.initEvent(eventType, true, true)  //'事件类型 阻止冒泡 阻止默认事件'
		return !el.dispatchEvent(evt);
	}
}

/*  
* 名  称:getLocalTime 
* 功  能:获取当前格式化日期
* 参  数:year mounth, date [number, number, number]
* 返回值:num 
* 注  意:
*/
function getLocalTime (nS) {
   return new Date(parseInt(nS) * 1000).toLocaleString().replace(/:\d{1,2}$/,' ');
}

/*  
* 名  称:getMonthWeek 
* 功  能:获取当前日期为当月第几周
* 参  数:year mounth, date [number, number, number]
* 返回值:num 
* 注  意:
*/
function getMonthWeek (a, b, c) {
     //a = d = 当前日期
     //b = 6 - w = 当前周的还有几天过完(不算今天)
     //a + b 的和在除以7 就是当天是当前月份的第几周
     var date = new Date(a, parseInt(b) - 1, c), w = date.getDay(), d = date.getDate();
     return Math.ceil((d + 6 - w) / 7);
 }

/*  
* 名  称:getYearWeek 
* 功  能:获取当前日期为当月第几周
* 参  数:year mounth, date [number, number, number]
* 返回值:num 
* 注  意:
*/
function getYearWeek (a, b, c) {
    //date1是当前日期
    //date2是当年第一天
    //d是当前日期是今年第多少天
    //用d + 当前年的第一天的周差距的和在除以7就是本年第几周
    var date1 = new Date(a, parseInt(b) - 1, c), date2 = new Date(a, 0, 1),
        d = Math.round((date1.valueOf() - date2.valueOf()) / 86400000);
    return Math.ceil((d + ((date2.getDay() + 1) - 1)) / 7);
}

/*  
* 名  称:getWeekNumbers
* 功  能:获取第 n 周周内的日期
* 参  数:year num [number, number]
* 返回值:arr [ year- mounth - date]
* 注  意:
*/
function getWeekNumbers(year, num){
	var d1 = new Date(year, 0, 1);
	var week = d1.getDay()||7;
	var dis = 7 - week; // 第一个星期剩余天数

	var daySeconds = 24*60*60*1000;
	var seconds = d1.getTime() + dis*daySeconds +(num-1)*daySeconds*7;
	var d2 = new Date(seconds);

	//获取目标周的星期数
	var week2 =d2.getDay()||7;
	var back = week2 - 1;
	var target = seconds - back*daySeconds;

	//循环目标星期的每一天
	var tempDay = [];
	for(var i=0; i<7; i++){
		var temp = target+i*daySeconds;
		var d3 = new Date(temp);

		//目标星期存在跨年的情况
		if(d3.getFullYear() == year){
			var result = d3.getFullYear() + "-" 
						+ (d3.getMonth()+1) + "-" 
						+ d3.getDate();
			tempDay.push(result)
		}
	}
	return tempDay;
}

/*  
* 名  称:showWeek
* 功  能:显示周几名称
* 参  数:num [number]
* 返回值:str [string]
* 注  意:
*/
function showWeek(num){
	var str = '星期';
	switch(num){
		case 0: str += '日';
		  break;
		case 1: str += '一';
		  break;
		case 2: str += '二'
		  break;
		case 3: str += '三'
		  break;
		case 4: str += '四'
		  break;
		case 5: str += '五'
		  break;
		case 6: str += '六'
		  break;
		default:
		  str = '输入有误';
	}
	return str;
}

/*  
* 名  称:showAllDate
* 功  能:获取当年截至当前日期的集合
* 参  数:num [(number)]
* 返回值:resutl [array]
* 注  意:
*/
function showAllDate(year){
	var d2 = new Date();
	var d1 = new Date(year||d2.getFullYear(), 0 ,1);
	var seconds1 = d1.getTime();
	var seconds2 = d2.getTime();
	var daySeconds = 24*60*60*1000;
	var result = [];

	for(i = seconds1; i<=seconds2; i+=daySeconds){
		var d3 = new Date(i);
		result.push(d3.getFullYear() +'-'+ (d3.getMonth()+1) +'-'+ d3.getDate())
	}
	return result;
}

/*  
* 名  称:Stack
* 功  能:简易栈
* 参  数:void
* 返回值:void
* 包含方法:
*   size    获取长度
*	append  入栈
*   pop     出栈
*   peek    访问栈顶
*   clear   清栈
* 注  意:
*/
function Stack () {
	this.data = [];
	this.top = 0;
	this.size = function(){return this.top};
	this.append = function (sth) {  // 入栈
		this.data[this.top++] = sth;
		this.size++;
	}; 
	this.pop = function () {return this.data[--this.top]}; // 访问栈顶
	this.peek = function () {return this.data[this.top - 1]}; // 出栈
	this.clear = function () {this.top = 0};
}		

/*  
* 名  称:transform
* 功  能:转换进制
* 参  数:num, num [number number]
* 返回值:str [string]
* 注  意:引用Stack函数
*/
function transform(n, b){
	var s = new Stack();
	do {
		s.append( n % b);  // 0 1 0 1
		n = Math.floor(n /= b);
	} while (n > 0);
	
	var str = '';
	while(s.top>0){
		str += s.pop(); 
	}	
	return str;
}	

/*  
* 名  称:isHui
* 功  能:判断数组[一维] 字符串 数字 是否为回文
* 参  数:num [number(string, array)]
* 返回值:bool [boolean]
* 注  意:引用Stack、 getType函数 
*/
function isHui(sth){
	var s = new Stack();
	if(getType(sth) === 'number' || getType(sth) === 'string'){
		sth = sth.toString();
	} else if (getType(sth) === 'array') {
		sth = sth.join('');
	}else{
		console.info('无法遍历');
		return flase;
	}

	var i = sth.length - 1;
	while(s.top < sth.length){
		s.append(sth[i--]);
	}
	return s.data.join('') === sth;
}

/*  
* 名  称:Stack
* 功  能:简易队列
* 参  数:0|1 [简单队列,优先队列,循环队列]
* 返回值:void
* 包含方法:
*   size    获取长度
*   isEmpty 队列是否为空
*	enqueue  入队
*   dequeue   出队
*   front    访问队首
*   end    访问队尾
*   clear   清队
* 注  意:
*/

function Queue(type){
	this.type = type;
	this.data = [];
	this.size = 0;
	// 入队
	this.enqueue = function (sth) {
		this.data[this.size++] = sth;
		if (type === 2) { // 优先队列
			this.data.sort((sth1, sth2) => sth1.order - sth2.order);
		}
		return sth;
	};
	// 出队
	this.dequeue = function () {
		var sth = this.data.shift();
		this.size--;
		if (this.type === 1) { // 循环队列
			this.size = this.enqueue(sth);
		}
		return sth
	};
	this.front = function () { return this.data[0] };
	this.end = function () { return this.data[this.size - 1] };
	this.clear = function () { this.data = [] };

	Object.defineProperty(this, 'isEmpty',{
		get: function(){
			return this.size === 0;
		}
	})
}

/*  
* 名  称:numLen
* 功  能:判断数字的位数
* 参  数:num [number]
* 返回值:num [number]
* 注  意:
*/
function numLen (num) {
    let len = 0;
    num = Math.abs(num);
    while (num >= 1 && ++len) {
        num /= 10;
    }
    return len;
}

/*  
* 名  称:table2Excel
* 功  能:多浏览器兼容从table导出excel
* 参  数:el [object(string)]
* 返回值:el [DOMobject]
* 注  意:
*/
function table2Excel (el) {
	if (!el.nodeType) el = document.querySelector(id);
	let exportExcel = {
		init: function (el) {
			if (el && _.browser !== 'ie') {
				this.standardExport()(el);
			} else {
				this.ieExport(el);
			}
			return el;
		},
		// 标准浏览器的导出方式
		standardExport () {
            let uri = 'data:application/vnd.ms-excel;base64,';
            let template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>';
            let base64 = (s) => window.btoa(unescape(encodeURIComponent(s)));
            let format = (s, c) => s.replace(/{(\w+)}/g, (m, p) => { return c[p]; });
            return (table, name) => {
                var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML};
                window.location.href = uri + base64(format(template, ctx));
            };
        },
        // ie浏览器的导出方式
        ieExport (curTbl) {
            let ActiveXObject = window.ActiveXObject;
            let oXL = new ActiveXObject('Excel.Application');
            // 创建AX对象excel
            let oWB = oXL.Workbooks.Add();
            // 获取workbook对象
            let xlsheet = oWB.Worksheets(1);
            // **当前sheet
            let sel = document.body.createTextRange();
            sel.moveToElementText(curTbl);
            // 把表格中的内容移到TextRange中
            sel.select;
            // 全选TextRange中内容
            sel.execCommand('Copy');
            // 复制TextRange中内容
            xlsheet.Paste();
            // 粘贴到活动的EXCEL中
            oXL.Visible = true;
            // 设置excel可见属性
            let [fname, idTmr] = [];
            try {
                fname = oXL.Application.GetSaveAsFilename('Excel.xls', 'Excel Spreadsheets (*.xls), *.xls');
            } catch (e) {
                console.info('Nested catch caught ' + e);
            } finally {
                oWB.SaveAs(fname);
                oWB.Close(window.savechanges = false);
                // xls.visible = false;
                oXL.Quit();
                oXL = null;
                // 结束excel进程,退出完成
                // window.setInterval('Cleanup();',1);
                idTmr = setInterval(() => {
                    clearInterval(idTmr);
                    window.CollectGarbage();
                }, 1);
            }
        }
	}
	return exportExcel.init(el);
}

/*  
* 名  称:autoSelect
* 功  能:js自动选中文本
* 参  数:el [object(string)]
* 返回值:el [DOMobject]
* 注  意:
*/
function autoSelect (el) {
	let { msie, mozilla, opera, safari } = _.boswer;
	if (msie) {
	    let range = document.body.createTextRange();
	    range.moveToElementText(el);
	    range.select();
	} else if (mozilla || opera) {
	    let selection = window.getSelection();
	    let range = document.createRange();
	    range.selectNodeContents(el);
	    selection.removeAllRanges();
	    selection.addRange(range);
	} else if (safari) {
	    let selection = window.getSelection();
	    selection.setBaseAndExtent(el, 0, el, 1);
	}
	return el;
}


/*  
* 名  称:importFile
* 功  能:读取本地文件
* 参  数:getFile [Function]
* 返回值:void
* 注  意:
*/
function importFile (getFile) {
	var fileInput = document.getElementById('mxuploadFile');
    if (!fileInput) {
        fileInput = document.createElement('input');
        fileInput.id = 'mxuploadFile';
        fileInput.type = 'file';
        fileInput.multiple = 'false';
        fileInput.accept = 'text/xml,application/xml';
        fileInput.style.display = 'none';
        document.body.appendChild(fileInput);

        fileInput.onchange = mxUtils.bind(this, function (e) {
            var graph = this.editorUi.editor.graph;
            var file = e.target.files[0];
            var reader = new FileReader();

            // readAsText只能用来读取文本文件,不能用它读取图片等非文本文件
            file && reader.readAsText(file);
            reader.onload = function () {
            	getFile(reader.result);
            }
        })
	}
    fileInput.click();
}

/*  
* 名  称:exportFile
* 功  能:拼接&下载本地文件
* 参  数:name [String] data[String]
* 返回值:void
*/
function exportFile (name, data) {
    var export_blob = new Blob([data], {type: 'text/xml'});
    if (window.navigator.msSaveBlob) {
        window.navigator.msSaveBlob(export_blob, name + '.xml');
    } else {
        var urlObject = window.URL || window.webkitURL || window;
        var file = urlObject.createObjectURL(export_blob);
        var a = document.createElement('a');
        a.id = 'download';
        document.body.appendChild(a);
        a.href = file;
        a.addEventListener('click', function () {
            a.download = name;
            document.body.removeChild(a);
        });
        a.click();
    }
}

/*  
* 名  称:loadScript
* 功  能:动态加载js
* 参  数:path [String] win[Object]
* 返回值:void
*/
function loadScript (path, win) {
	var srcipt = document.createElement('script');
	script.type = 'text/javascript';
	script.src = path;
	win = win || window;
	win.document.body.append(script);
}

/*  
* 名  称:deepClone
* 功  能:深拷贝对象
* 参  数:initalObj[Object]
* 返回值:initalObj'
*/
// function deepClone1 (initalObj) {
//     var obj = {};
//     try {
//         obj = JSON.parse(JSON.stringify(initalObj));
//     } finally {
//         return obj;
//     }
// }


function deepClone(initalObj, finalObj) {
  var obj = finalObj || {};
  for (var i in initalObj) {
    // 避免相互引用对象导致死循环,如initalObj.a = initalObj的情况
    var prop = initalObj[i];
    if(prop === obj) {
      continue;
    }
    if (typeof prop === 'object') {
      obj[i] = (prop.constructor === Array) ? [] : {};
      deepClone(prop, obj[i]);
    } else {
      obj[i] = prop;
    }
  }
  return obj;
}

/*  
* 名  称:isEmpty
* 功  能:转义特殊字符
* 参  数:[]
* 返回值:str'
*/
function isEmpty () {
	if (typeof obj === 'undefined' || obj === null || JSON.stringify(obj) === '{}' || obj === 0 || obj === '' || isNaN(obj)) {
    	return true;
    }
    return false;
}

/*  
* 名  称:strReplace
* 功  能:转义特殊字符
* 参  数:str[Object] reverse[true||void]
* 返回值:str'
*/
function strReplace (str, reverse) {
    if (reverse) {
        return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\'|\"/g, "&quot;");
    } else {
        return str.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&amp;/g, '&').replace(/&quot;/g, "'");
    }
}

/*  
* 名  称:request
* 功  能:获取地址栏中对应参数
* 参  数:paras[Object]
* 返回值:str
*/
function request (paras) {
    var url = location.href;
    var paraString = url.substring(url.indexOf("?") + 1, url.length).split("&");
    var paraObj = {}
    for (i = 0; j = paraString[i]; i++) {
        paraObj[j.substring(0, j.indexOf("=")).toLowerCase()] = j.substring(j.indexOf("=") + 1, j.length);
    }
    var returnValue = paraObj[paras.toLowerCase()];
    if (typeof (returnValue) == "undefined") {
        return "";
    } else {
        return returnValue;
    }
}

/*  
* 名  称:getGuid
* 功  能:获取全球唯一标识码
* 参  数:bool[Boolean] <默认不传小写>
* 返回值:str
*/
function getGuid (bool) {
    var guid ='';
    for (var i = 1; i <= 32; i++) {
        var flag = Math.floor(Math.random() * 10);
        if (flag % 2 === 0 ) {
            var caseMode = bool ? 65 : 97;
            var n = Math.floor(flag * 2.4) + caseMode;

            n = String.fromCharCode(n);
            guid += n;
        } else {
            guid += flag;
        }
        if (i === 8 || i === 12 || i=== 16 || i=== 20) {
            guid += '-';
        }
    }
    return guid;
}


/*  
* 名  称:base64Img2Blob
* 功  能:base64字符串转blob对象
* 参  数:code[String]
* 返回值:object
*/
function base64Img2Blob(code) {
	var parts = code.split(';base64,');
	var contentType = parts[0].split(':')[1];
	var raw = window.atob(parts[1]);
	var rawLength = raw.length;

	var uInt8Array = new Uint8Array(rawLength);

	for (var i = 0; i < rawLength; ++i) {
		uInt8Array[i] = raw.charCodeAt(i);
	}

	return new Blob([uInt8Array], { type: contentType });
}

/*  
* 名  称:Caculate
* 功  能:取交集
* 参  数: void []
* 返回值:object
*/
function Caculate () {
	// 交集
	this.focus = function () {
		var arr =[];
		var focus =[];
		var json = {};
		var concat = [];

		for(var i=0; i<arguments.length; i++){
			var bool = Object.prototype.toString.call(arguments[i]) =='[object Array]';
			if(bool){
				arr = arr.concat(arguments[i])
			}
		}
		for(var i=0; i<arr.length; i++){
			if(json[arr[i]]!==''){
				json[arr[i]]='';
				concat.push(arr[i]);
			}else{
				focus.push(arr[i])
			}
		}
		return {focus,concat,arr}
	}
}

/*  
* 名  称:getAutoWidth
* 功  能:获取指定文本的宽度
* 参  数: obj []
* 返回值:number
*/
function getAutoWidth (obj) {
	var rect = obj.getBoundingClientRect();
	var width = rect.right-rect.left;
	return width;
}


/*  
* 名  称:supportPrintIframe
* 功  能:解决ie(ff)下iframe分多页打印导致超出一页的部分显示空白的问题
* 参  数: void
* 返回值:void
*/
function supportPrintIframe () {
	// 重写打印之前操作
	window.onbeforeprint = function () {
		    var ifrmas = document.body.getElementsByTagName('iframe');
		    for (var i = 0; i < ifrmas.length; i++) {
			    var body = window.frames[i].document.body.innerHTML;
			    var parent = ifrmas[i].parentNode;
			    ifrmas[i].style.display = 'none';

			    var div = document.createElement('div');
			    div.id = 'printBefore' + i; 
			    div.innerHTML = body;
			    parent.appendChild(div);
		    }
		};
	// 重写打印之后的操作
	window.onafterprint = function () {
		var ifrmas = document.body.getElementsByTagName('iframe');
		for (var i = 0; i < ifrmas.length; i++) {
			var printBefore = document.getElementById('printBefore' + i);
			ifrmas[i].style.display = 'block';
			if (printBefore) {
				document.body.removeChild(printBefore);
			}
		}
	}
}


/*  
* 名  称:getPlatform
* 功  能:获取运行设备的平台信息
* 参  数: void
* 返回值:String
*/
function getPlatform () {
	var userAgentInfo = navigator.userAgent;
    var Agents = ["Android", "iPhone",
                "SymbianOS", "Windows Phone",
                "iPad", "iPod"];
    var flag = '';
    for (var v = 0; v < Agents.length; v++) {
        if (userAgentInfo.indexOf(Agents[v]) > 0) {
            flag = Agents[v];
            break;
        }
    }
    return flag;
}

/*  
* 名  称:htmlEncode
* 功  能: 转义字符防止xxs攻击
* 参  数: void
* 返回值:String
*/
function htmlEncode (value){
    if (value) {
    	var pre = document.createElement('pre');
    	pre.innerText = value;
        return pre.innerHTML;
    } else {
        return '';
    }
}

/*  
* 名  称:htmlDecode
* 功  能:将转义字符转化为常规标签
* 参  数: void
* 返回值:String
*/
function htmlDecode (value) {
    if (value) {
    	var pre = document.createElement('pre');
    	pre.innerHTML = value
        return pre.innerText;
    } else {
        return '';
    }
}


/**
* 将url中的html字符转义, 仅转义  ', ", <, > 四个字符
* @param  { String } str 需要转义的字符串
* @param  { RegExp } reg 自定义的正则
* @return { String }     转义后的字符串
*/
function unhtmlForUrl (str, reg) {
    return str ? str.replace(reg || /[<">']/g, function (a) {
        return {
            '<': '&lt;',
            '&': '&amp;',
            '"': '&quot;',
            '>': '&gt;',
            "'": '&#39;'
        }[a]

    }) : '';
}

/**
 * 将str中的转义字符还原成html字符
 * @see UE.utils.unhtml(String);
 * @method html
 * @param { String } str 需要逆转义的字符串
 * @return { String } 逆转义后的字符串
 * @example
 * ```javascript
 *
 * var str = '&lt;body&gt;&amp;&lt;/body&gt;';
 *
 * //output: <body>&</body>
 * console.log( UE.utils.html( str ) );
 *
 * ```
 */
function formatStr2Html(str) {
    return str ? str.replace(/&((g|l|quo)t|amp|#39|nbsp);/g, function (m) {
        return {
            '&lt;': '<',
            '&amp;': '&',
            '&quot;': '"',
            '&gt;': '>',
            '&#39;': "'",
            '&nbsp;': ' '
        }[m]
    }) : '';
}

/**
* 将url中的html字符转义, 仅转义  ', ", <, > 四个字符
* @param  { void }
* @return { Boolean }  是否是移动端设备
*/
function IsMobile () {
    var sUserAgent = navigator.userAgent.toLowerCase();
    var bIsIpad = sUserAgent.match(/ipad/i) == "ipad";
    var bIsIphoneOs = sUserAgent.match(/iphone os/i) == "iphone os";
    var bIsMidp = sUserAgent.match(/midp/i) == "midp";
    var bIsUc7 = sUserAgent.match(/rv:1.2.3.4/i) == "rv:1.2.3.4";
    var bIsUc = sUserAgent.match(/ucweb/i) == "ucweb";
    var bIsAndroid = sUserAgent.match(/android/i) == "android";
    var bIsCE = sUserAgent.match(/windows ce/i) == "windows ce";
    var bIsWM = sUserAgent.match(/windows mobile/i) == "windows mobile";
    //document.writeln("您的浏览设备为:");
    if (bIsIpad || bIsIphoneOs || bIsMidp || bIsUc7 || bIsUc || bIsAndroid || bIsCE || bIsWM) {
        return true;
    } else {
        return false;
    }
}

/*  
* 名  称:clone
* 功  能:clone 对象
* 参  数: object
* 返回值:object'
*/
function clone (obj) {
	return (Object.create || function (obj) {
		var F = function () {};
		F.prototype = obj;
		return new F();
	})(obj)
}

/*  
* 名  称:validateReg
* 功  能: 验证传入的正则表达式是否正确
* 参  数: String
* 返回值:boolean || reg
*/
function validateReg(rule = '//') {
	return new Function(`
		try {
			const isWrapper = /^\\/\\w{1,}\\/$/.test(rule)
			let realRule = null
			if (!isWrapper) {
				realRule = new RegExp(rule)
			} else {
				const params = rule.match(/([^/]+)$/)[0]
				const unWrapRule = rule.replace(/^\\/|\\/&/g, '')
				realRule = new RegExp(unWrapRule, params)
			}
			return realRule
		} catch (err) {
			return false
		}
	`)
}

/*  
* 名  称:节流函数
* 功  能: 降低方法触发频率
* 参  数: Function Number
* 返回值:boolean
*/
function throttle (fn, interval) {
	var timer,
		_self = fn,
		firstTime = true;
	return function () {
		var me = this;
		var arg = arguments
		if (firstTime) {
			_self.apply(me, arg)
			return firstTime = false
		}
		if (timer) {
		   return false
		} else {
			timer = setTimeout(function(){
				clearTimeout(timer)
				timer = null
				_self.apply(me, arg)
			}, interval||500)
		}	
	}	
}

function captialSentence (sentence, fn = v => v.toUpperCase()) {
	return sentence.replace(/\s?\w+\s?/g, (v) => v.replace(/\w/, (m) => fn(m)))
}
相关标签: 代码片段