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, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\'|\"/g, """);
} else {
return str.replace(/</g, '<').replace(/>/g, '>').replace(/&/g, '&').replace(/"/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 {
'<': '<',
'&': '&',
'"': '"',
'>': '>',
"'": '''
}[a]
}) : '';
}
/**
* 将str中的转义字符还原成html字符
* @see UE.utils.unhtml(String);
* @method html
* @param { String } str 需要逆转义的字符串
* @return { String } 逆转义后的字符串
* @example
* ```javascript
*
* var str = '<body>&</body>';
*
* //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 {
'<': '<',
'&': '&',
'"': '"',
'>': '>',
''': "'",
' ': ' '
}[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)))
}
上一篇: WPF CheckBox控件绑定变量