常用js函数整理汇总

前端部门工作经常用到的一些方法,部分摘自网上分享,并进行了优化

/**
 * 前端开发部常用函数整理汇总,前端人员定期完善
 * @authors 
 * @date    2017-11-23
 * @version 1.0
 */
var GLOBAL = {};//全局对象,存放所有全局变量、方法
    GLOBAL.str = {};//存放全局变量
    GLOBAL.fun = {};//存放全局方法
    GLOBAL.obj = {};//存放全局对象

/**
 * 获取、设置url中参数值
 *
 * @param    {String}  sVar     url中参数
 *
 * @date     2017-11-23
 * @author
 */
//获取对应参数
//Details.html?bargainingid=318
//getUrlPrmt('bargainingid')
//318
GLOBAL.fun.getUrlPrmt = function (sVar) {
    return decodeURI(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + encodeURI(sVar).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1"));
}
//设置url参数
//setUrlPrmt({'a':1,'b':2})
//a=1&b=2
GLOBAL.fun.setUrlPrmt = function (obj) {
    let _rs = [];
    for (let p in obj) {
        if (obj[p] != null && obj[p] != '') {
            _rs.push(p + '=' + obj[p])
        }
    }
    return _rs.join('&');
}
/**
 * 获取页面可视高度、宽度
 * @date     2017-11-23
 * @author
 */
GLOBAL.fun.getPageViewHeight = function () {
    var d = document, a = d.compatMode == "BackCompat"
        ? d.body
        : d.documentElement;
    return a.clientHeight;
}
GLOBAL.fun.getPageViewWidth = function () {
    var d = document, a = d.compatMode == "BackCompat"
        ? d.body
        : d.documentElement;
    return a.clientWidth;
}
/**
 * 字符串长度截取,超出部分用“...”
 *
 * @param    {String}  str     需要截取的字符串
 * @param    {Number}  len     需要截取的长度
 *
 * @date     2017-11-23
 * @author
 */
//cutStr('我是示例','4')
//我是...
GLOBAL.fun.cutStr = function (str, len) {
    if(str.length*2<=len){
        return str
    }else {
        var temp,
            icount = 0,
            patrn = /[^\x00-\xff]/,
            strre = "";
        for (var i = 0; i < str.length; i++) {
            if (icount < len - 1) {
                temp = str.substr(i, 1);
                if (patrn.exec(temp) == null) {
                    icount = icount + 1
                } else {
                    icount = icount + 2
                }
                strre += temp
            }
            else {
                break;
            }
        }
        return strre + "..."
    }
}

/**
 * ajax获取接口字典中的数据,并替换成mui picker对应格式[{"text":"","value":""},{"text":"","value":""}]
 *
 * @param    {String}  interface     字典接口
 *
 * @date     2017-11-23
 * @author
 */
GLOBAL.fun.ajaxDictionary = function (interface) {
    var picker = [];
    $(document).ready(function(){
        $.ajax({
            url: ajaxUrl + 'Home/'+interface,
            type: 'POST',
            dataType: 'json',
            success:function (data) {
                // console.log(data);
                for (var i=0; i<data.data.length; i++){
                    var picker_o = {};
                    picker_o.text = data.data[i].name;
                    picker_o.value = data.data[i].id;
                    picker[i] = picker_o;
                }
            }
        })
    });
    return(picker);
}

/**
 * localStorage存储、获取,默认存储24小时
 *
 * @param    {String}  key     关键字
 * @param    {String}  value   值
 *
 * @date     2017-11-23
 * @author
 */
GLOBAL.fun.setlocalStorage = function (key,value){
    var curTime = new Date().getTime();
    localStorage.setItem(key,JSON.stringify({data:value,time:curTime}));
}

GLOBAL.fun.getlocalStorage = function (key) {
    var exp = 1000*60*60*24;
    var data = localStorage.getItem(key);
    if(data){
        var dataObj = JSON.parse(data);
        if (new Date().getTime() - dataObj.time>exp) {
            localStorage.clear();//信息已过期清楚缓存
        }else{
            return dataObj;
        }
    }
}

/**
 * cookies存储、获取、删除
 *
 * @param    {String}  name    关键字
 * @param    {String}  value   值
 * @param    {String}  value   时间(单位天)
 *
 * @date     2017-11-23
 * @author
 */
//写cookies方法
GLOBAL.fun.setCookie = function (name,value,iDay) {
    var oDate=new Date();
    oDate.setDate(oDate.getDate()+iDay);
    document.cookie=name+'='+value+';expires='+oDate;
}
//读cookies方法
GLOBAL.fun.getCookie = function (name) {
    var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
    if(arr=document.cookie.match(reg))
        return unescape(arr[2]);
    else
        return null;
}
//删除cookies方法
GLOBAL.fun.delCookie = function (name) {
    var exp = new Date();
    exp.setTime(exp.getTime() - 1);
    var cval = GLOBAL.fun.getCookie(name);
    if(cval!=null)
        document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}
/**
 * 去除字符串空格
 *
 * @param    {String}  str    字符串
 * @param    {Number}  type   数字  1-所有空格  2-前后空格  3-前空格 4-后空格
 *
 * @date     2017-11-23
 * @author
 */
GLOBAL.fun.trim = function (str,type) {
    switch (type){
        case 1:return str.replace(/\s+/g,"");
        case 2:return str.replace(/(^\s*)|(\s*$)/g, "");
        case 3:return str.replace(/(^\s*)/g, "");
        case 4:return str.replace(/(\s*$)/g, "");
        default:return str;
    }
}

/**
 * 随机返回一个范围的数字
 *
 * @param    {Number}  n1,n2    数字
 *
 * @date     2017-11-23
 * @author
 */
GLOBAL.fun.randomNumber = function (n1,n2) {
    //randomNumber(5,10)
    //返回5-10的随机整数,包括5,10
    if(arguments.length===2){
        return Math.round(n1+Math.random()*(n2-n1));
    }
    //randomNumber(10)
    //返回0-10的随机整数,包括0,10
    else if(arguments.length===1){
        return Math.round(Math.random()*n1)
    }
    //randomNumber()
    //返回0-255的随机整数,包括0,255
    else{
        return Math.round(Math.random()*255)
    }
}

/**
 * 随机产生颜色
 *
 * @date     2017-11-23
 * @author
 */
GLOBAL.fun.randomColor = function () {
    //randomNumber是上面定义的函数
    //写法1
    // return 'rgb(' + randomNumber(255) + ',' + randomNumber(255) + ',' + randomNumber(255) + ')';

    //写法2
    return '#'+Math.random().toString(16).substring(2).substr(0,6);

    //写法3
    // var color='#';
    // for(var i=0;i<6;i++){
    //     color+='0123456789abcdef'[randomNumber(15)];
    // }
    // return color;
}

/**
 * 适配rem,效果图以720px为基数
 *
 * @date     2017-11-23
 * @author
 */
GLOBAL.fun.getFontSize = function () {
    var doc=document,win=window;
    var docEl = doc.documentElement,
        resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
        recalc = function () {
            var clientWidth = docEl.clientWidth;
            if (!clientWidth) return;
            //如果屏幕大于720,设置clientWidth=720,防止font-size会超过100px
            if(clientWidth>720){clientWidth=720}
            //设置根元素font-size大小
            docEl.style.fontSize = 100 * (clientWidth / 720) + 'px';
        };
    //屏幕大小改变,或者横竖屏切换时,触发函数
    win.addEventListener(resizeEvt, recalc, false);
    //文档加载完成时,触发函数
    doc.addEventListener('DOMContentLoaded', recalc, false);
}
GLOBAL.fun.getFontSize();

/**
 * 字母大小写切换
 *
 * @param    {Number}  type    数字 1:首字母大写、2:首页母小写、3:大小写转换、4:全部大写、5:全部小写
 *
 * @date     2017-11-23
 * @author
 */
//changeCase('asdasd',1)
//Asdasd
GLOBAL.fun.changeCase = function (str,type) {
    function ToggleCase(str) {
        var itemText = ""
        str.split("").forEach(
            function (item) {
                if (/^([a-z]+)/.test(item)) {
                    itemText += item.toUpperCase();
                }
                else if (/^([A-Z]+)/.test(item)) {
                    itemText += item.toLowerCase();
                }
                else{
                    itemText += item;
                }
            });
        return itemText;
    }

    switch (type) {
        case 1:
            return str.replace(/^(\w)(\w+)/, function (v, v1, v2) {
                return v1.toUpperCase() + v2.toLowerCase();
            });
        case 2:
            return str.replace(/^(\w)(\w+)/, function (v, v1, v2) {
                return v1.toLowerCase() + v2.toUpperCase();
            });
        case 3:
            return ToggleCase(str);
        case 4:
            return str.toUpperCase();
        case 5:
            return str.toLowerCase();
        default:
            return str;
    }
}

/**
 * 字符串替换
 *
 * @param    {String}  str         字符串
 * @param    {String}  AFindText   要替换的字符
 * @param    {String}  ARepText    替换成什么
 * @date     2017-11-23
 * @author
 */
GLOBAL.fun.replaceAll = function (str,AFindText,ARepText) {
    raRegExp = new RegExp(AFindText,"g");
    return str.replace(raRegExp,ARepText);
}

/**
 * 字符串正则验证
 *
 * @param    {String}  str
 * @param    {String}  type
 * @date     2017-11-23
 * @author
 */
//checkType('165226226326','phone')
//false
GLOBAL.fun.checkType = function (str, type) {
    switch (type) {
        case 'email':
            return /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test(str);
        case 'phone':
            return /^1[3|4|5|7|8][0-9]{9}$/.test(str);
        case 'tel':
            return /^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/.test(str);
        case 'number':
            return /^[0-9]$/.test(str);
        case 'english':
            return /^[a-zA-Z]+$/.test(str);
        case 'chinese':
            return /^[\u4E00-\u9FA5]+$/.test(str);
        case 'idCard'://身份证号正则
            return /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test(str);
        case 'url'://网址正则
            return /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/.test(str);
        case 'qq'://qq号正则 5至11位
            return /^[1-9][0-9]{4,10}$/.test(str);
        case 'wx'://微信号正则,6至20位,以字母开头,字母,数字,减号,下划线
            return /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/.test(str);
        case 'carNumber'://车牌号正则
            return /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/.test(str);
        default :
            return true;
    }
}

/**
 * 返回顶部
 *
 * @param    {String}  btnId 控件id
 *
 * @date     2017-11-23
 * @author
 */
GLOBAL.fun.backTop = function (btnId) {
    var btn = document.getElementById(btnId);
    var d = document.documentElement;
    var b = document.body;
    window.onscroll = set;
    btn.style.display = "none";
    btn.onclick = function() {
        btn.style.display = "none";
        window.onscroll = null;
        this.timer = setInterval(function() {
            d.scrollTop -= Math.ceil((d.scrollTop + b.scrollTop) * 0.1);
            b.scrollTop -= Math.ceil((d.scrollTop + b.scrollTop) * 0.1);
            if ((d.scrollTop + b.scrollTop) == 0) clearInterval(btn.timer, window.onscroll = set);
        }, 10);
    };
    function set() {
        btn.style.display = (d.scrollTop + b.scrollTop > 100) ? 'block': "none"
    }
}

/**
 * 清除对象中值为空的属性
 *
 * @param    {Object}  obj
 *
 * @date     2017-11-23
 * @author
 */
GLOBAL.fun.filterParams = function (obj) {
    let _newPar = {};
    for (let key in obj) {
        if ((obj[key] === 0 || obj[key]) && obj[key].toString().replace(/(^\s*)|(\s*$)/g, '') !== '') {
            _newPar[key] = obj[key];
        }
    }
    return _newPar;
}
/**
 * 数组操作,去重、排序、交集、差集、并集、对象数组排序
 *
 * @param    {Array}  arr
 *
 * @date     2017-11-23
 * @author
 */
var arr1=[1,2,2,3,4,4,3,45,6,7,5];
var arr2=[3,4,5,6,56];
var arr3=[]
//1、去重
GLOBAL.fun.arrayUnique = function (arr) {
    var result = [];
    for(var i = 0;i<arr.length;i++){
        var temp = arr.slice(i+1,arr.length)
        if(temp.indexOf(arr[i]) == -1){
            result.push(arr[i]);
        }else{
            continue;
        }
    }
    return result;
}
// console.log(GLOBAL.fun.arrayUnique(arr1))
//2、排序
//desc不存在默认升序
//desc存在降序
GLOBAL.fun.arraySortByNum = function (arr,desc) {
    if(desc){
        return arr.sort(function(x,y){return y-x})
    }else{
        return arr.sort(function(x,y){return x-y})
    }
}
// console.log(GLOBAL.fun.arraySortByNum(arr1));
//3、交集
GLOBAL.fun.arrayIntersection = function (arr1,arr2) {
    var result = [];
    GLOBAL.fun.arrayUnique(arr1).forEach(function(x){
        arr2.forEach(function(y){
            if(x===y)result.push(x);
        })
    })
    return result;
}
// console.log(GLOBAL.fun.arrayIntersection(arr1,arr2))
//4、差集 arr1-arr2
GLOBAL.fun.arrayMinus = function (arr1, arr2) {
    var result = [];
    arr1.forEach(function (x) {
        if (arr2.indexOf(x) === -1){
            result.push(x);
        }else {
            return;
        }
    })
    return result;
}
// console.log(GLOBAL.fun.arrayMinus(arr1,arr2))
//5、并集,参数可以多个
GLOBAL.fun.arrayUnion = function () {
    console.log(arguments)
    var arr = [];
    for (var i=0;i<arguments.length;i++){
        arr = arr.concat(arguments[i])
    }
    return GLOBAL.fun.arrayUnique(arr);
}
// console.log(GLOBAL.fun.arrayUnion(arr1,arr2));
//6、对象数组快速排序
//key 排序依据关键字
//desc不存在默认升序
//desc存在降序
GLOBAL.fun.arrayObjSort = function (arr,key,desc) {
    key=key||'id';
    desc=desc|| null;
    if (arr.length == 0) return [];

    var left = new Array();
    var right = new Array();
    var pivot = arr[0][key];//分割值
    var pivotObj = arr[0];//存储值

    if(desc===null){//升序
        for (var i = 1; i < arr.length; i++) {
            arr[i][key] < pivot ? left.push(arr[i]): right.push(arr[i]);
        }
    }else{//降序
        for (var i = 1; i < arr.length; i++) {
            arr[i][key] > pivot ? left.push(arr[i]): right.push(arr[i]);
        }
    }
    return GLOBAL.fun.arrayObjSort(left,key,desc).concat(pivotObj, GLOBAL.fun.arrayObjSort(right,key,desc));
}
/**
 * tab切换
 *
 * @param    {name}  String  tab容器标识,用来明确当前tab
 * @param    {currentId}  Number  当前tab id
 * @param    {total}  Number  tab总数
 *
 * @date     2017-11-23
 * @author
 */
//操作容器
// <li id="pro1" onclick="setTab('pro',1,3)" class="hover">装货信息</li>
// <li id="pro2" onclick="setTab('pro',2,3)">卸货信息</li>
// <li id="pro3" onclick="setTab('pro',3,3)">承运方信息</li>
//显示容器
// <div id="con_pro_1" class="tabList"  style="display: block">
// <div id="con_pro_2" class="tabList"  style="display: none">
// <div id="con_pro_3" class="tabList"  style="display: none">
GLOBAL.fun.tabSet = function (name, currentId, total) {
    for(var i = 1; i <= total; i++) {
        // 声明
        var menu = document.getElementById(name + i);
        var con = document.getElementById("con_" + name + "_" + i);
        var id = $(".hover").attr("id");
        // 操作
        menu.className = i == currentId ? "hover" : "";
        con.style.display = i == currentId ? "block" : "none";
    }
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

带刺的茄子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值