javascript的一些实用方法整理

243 阅读4分钟

用正则表达式实现html编码(转义)

function htmlEncodeByRegExp(str) {
  var temp = "";
  if (str.length == 0) return "";
  temp = str.replace(/&/g, "&");
  temp = temp.replace(/</g, "&lt;");
  temp = temp.replace(/>/g, "&gt;");
  temp = temp.replace(/\s/g, "&nbsp;");
  temp = temp.replace(/\'/g, "&#39;");
  temp = temp.replace(/\"/g, "&quot;");
  return temp;
}

用正则表达式实现html解码(反转义)

function htmlDecodeByRegExp(str) {
  var temp = "";
  if (str.length == 0) return "";
  temp = str.replace(/&amp;/g, "&");
  temp = temp.replace(/&lt;/g, "<");
  temp = temp.replace(/&gt;/g, ">");
  temp = temp.replace(/&nbsp;/g, " ");
  temp = temp.replace(/&#39;/g, "\'");
  temp = temp.replace(/&quot;/g, "\"");
  return temp;
}

千分符-格式化金钱

方法1:

var thousandNum = num => num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
var money = thousandNum(20190214); // "20,190,214"

方法2:

var money = thousandNum(20190214); // "20,190,214"
function thousandNum(num){
  return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}

生成星级评分

方法1:

var startScore = rate => "★★★★★☆☆☆☆☆".slice(5 - rate, 10 - rate);
var start = startScore(3); // "★★★"

方法2:

var start = startScore(3); // "★★★"
function startScore(rate){
  return "★★★★★☆☆☆☆☆".slice(5 - rate, 10 - rate);
}

根据生日计算年龄

function getAge(dateString) {
  var today = new Date();
  var birthDate = new Date(dateString);
  var age = today.getFullYear() - birthDate.getFullYear();
  var m = today.getMonth() - birthDate.getMonth();
  if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
      age--;
  }
  return age;
}

判断一个数组中是否含有某个对象(必须是数组中的某一项),如果存在就删掉

var arr = [{name:'wang',age:18},{name:'zhu',age:21}];
var obj = {name:'zhu',age:21};
var newarr = removeAaary(arr,obj);
console.log(newarr);
// [
//   {name:'wang',age:18}
// ]
function removeAaary(_arr, _obj) {
  for (var i = 0; i < _arr.length; i++) {
    if (JSON.stringify(_arr[i]) == JSON.stringify(obj)) {
      if (i == 0) {
          _arr.shift(); //删除并返回数组的第一个元素
          return _arr;
      }
      else if (i == length - 1) {
          _arr.pop();  //删除并返回数组的最后一个元素
          return _arr;
      }
      else {
          _arr.splice(i, 1); //删除下标为i的元素
          return _arr;
      }
    }
  }
}

删除数组对象中的空对象

var arr = [{name:'1',age:'12'},{},{name:'2',age:'87'},{},{name:'3',age:'45'},{}]
for (var i = 0; i < arr.length; i++) {
  if (JSON.stringify(arr[i]) == "{}") {
    arr.splice(i, 1);
    i = i - 1;
  }
}
console.log(arr)

数组对象合并并去重

let json1=[
    {id:1,name:"aaa"},
    {id:2,name:"bbb"},
    {id:3,name:"ccc"},
] 
let json2=[
    {id:1,name:"aaa"},
    {id:2,name:"bbb"},
    {id:4,name:"ddd"},
]
let json = json1.concat(json2); //两个数组对象合并
let newJson = []; //盛放去重后数据的新数组
for(var item1 in json){  //循环json数组对象的内容
    let flag = true;  //建立标记,判断数据是否重复,true为不重复
    for(var item2 in newJson){  //循环新数组的内容
        if(json[item1].id == newJson[item2].id){ //让json数组对象的内容与新数组的内容作比较,相同的话,改变标记为false
            flag = false;
        }
    }
    if(flag){ //判断是否重复
        newJson.push(json[item1]); //不重复的放入新数组。  新数组的内容会继续进行上边的循环。
    }
}
console.log("newJson",newJson);

给数组对象中相同的属性值分组

var arr = [
    {"id":"1","groupname":"值1","value":"11"},
    {"id":"2","groupname":"值1","value":"22"},
    {"id":"3","groupname":"值2","value":"33"},
    {"id":"4","groupname":"值2","value":"44"},
    {"id":"5","groupname":"值3","value":"55"},
    {"id":"6","groupname":"值3","value":"66"}
];
var map = {},dest = [];
for(var i = 0; i < arr.length; i++){
  var ai = arr[i];
  if(!map[ai.groupname]){
    dest.push({
      groupname: ai.groupname,
      item: [ai]
    });
    map[ai.groupname] = ai;
  }else{
    for(var j = 0; j < dest.length; j++){
      var dj = dest[j];
      if(dj.groupname== ai.groupname){
        dj.item.push(ai);
        break;
      }
    }
  }
}
console.log(dest);  //打印结果如下
// [
//     {
//         "groupname": "值1",
//         "item": [
//             {"id": "1", "groupname": "值1", "value": "11"},
//             { "id": "2", "groupname": "值1", "value": "22"}
//         ]
//     },
//     {
//         "groupname": "值2",
//         "item": [
//             {"id": "3", "groupname": "值2", "value": "33"},
//             { "id": "4", "groupname": "值2", "value": "44"}
//         ]
//     },
//     {
//         "groupname": "值3",
//         "item": [
//             {"id": "5", "groupname": "值3", "value": "55"},
//             { "id": "6", "groupname": "值3", "value": "66"}
//         ]
//     }
// ]

找数组差集

var arr1 = [1,2,3,4];
var arr2 = [1,2];
diffSet(arr1, arr2);
console.log(diffSet(arr1, arr2)); //[3,4]
function diffSet(arr1, arr2) {
    var set2 = new Set(arr2);
    var subset = [];
    arr1.forEach(function(val, index) {
        if (!set2.has(val)) {
            subset.push(val);
        }
    });
    return subset;
};

找数组对象差集

var arr1 = [{nodeNo:'12'},{nodeNo:'13'},{nodeNo:'14'}];
var arr2 = [{nodeNo:'13'},{nodeNo:'14'}];
var arr3 = arr1.concat(arr2);
var newarr = [];
var arr1v = [];
for(var i = 0; i < arr1.length; i++){
	arr1v.push(arr1[i].nodeNo);
}
var arr2v = [];
for(var j = 0; j < arr2.length; j++){
	arr2v.push(arr2[j].nodeNo);
}
for(var i = 0; i < arr3.length; i++){
	if(arr1v.indexOf(arr3[i].nodeNo) == -1 || arr2v.indexOf(arr3[i].nodeNo) == -1){
		newarr.push(arr3[i]);
	}
}
console.log(newarr); //[{nodeNo:'12'}]

找两个数组对象交集

var arr1 = [{ name: 'name1', id: 1 }];
var arr1Id = [];
for(var i = 0; i < arr1.length; i++){
  arr1Id.push(arr1[i].id);
}
var arr2 = [{ name: 'name1', id: 1 }, { name: 'name2', id: 2 }];
var result = arr2.filter(function (v) {
  return arr1Id.indexOf(v.id) !== -1
})
console.log(result); //[{ name: 'name1', id: 1 }]

找两个数组的交集

var c = a.filter(function(v){ return b.indexOf(v) > -1 })

数组对象根据某个属性 - 升序排序

// console.log(arr.sort(ascCompare('age')))
function ascCompare(property){
  return function (a, b) {
    return a[property] > b[property] ? 1 : -1;
  }
}

数组对象根据某个属性 - 降序排序

// console.log(arr.sort(descCompare('age')))
function descCompare(property){
  return function (a, b) {
    return a[property] < b[property] ? 1 : -1;
  }
}

日期格式化

Fri Feb 19 17:17:39 CST 2021 -> 2021-02-19 17:17:39

var datetime = formatDate('Fri Feb 19 17:17:39 CST 2021','yyyy-MM-dd HH:mm:ss');
function formatDate(date,format){
  if(null==date || ""==date){
    return "";
  }
  if(date==''||date==null){
    return '';
  }
  date = new Date(date);
  date.setHours(date.getHours()-14);
  var o = {
    'M+' : date.getMonth() + 1, //month
    'd+' : date.getDate(), //day
    'H+' : date.getHours(), //hour
    'm+' : date.getMinutes(), //minute
    's+' : date.getSeconds(), //second
    'q+' : Math.floor((date.getMonth() + 3) / 3), //quarter
    'S' : date.getMilliseconds() //millisecond
  };
  if (/(y+)/.test(format)){
    format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
  }
  for (var k in o){
    if (new RegExp('(' + k + ')').test(format)){
      format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length));
    }
  }
  return format;
}

获取两个日期相差月数

function diffMonths(start,end){
  var date1 = start.split('-');
  var date2 = end.split('-');
  var year_month = (parseInt(date2[0])-parseInt(date1[0]))*12;
  var months = parseInt(date2[1])-parseInt(date1[1]);
  return year_month + months;
}

获取明年今天时间

function getTomrTodayDateTime() {
  var now = new Date();
  var year = now.getFullYear()+1;
  var mth = now.getMonth();
  var day = now.getDate();
  var h = now.getHours();
  var m = now.getMinutes();
  var s = now.getSeconds();
  var month = mth + 1;
  if (month < 10)  month = '0' + month;
  if (day < 10) day = '0' + day;
  if (h < 10) h = '0' + h;
  if (m < 10) m = '0' + m;
  if (s < 10) s = '0' + s;
  var str = year + '-' + month + '-' + day + ' ' + h + ':' + m + ':' + s;
  return str;
}

获取某一天

type | 0:当天,-1:上个月,1:下个月

function getXmonthToday(type) {
  var now = new Date(); // 可以传值调式 now = new Date(2019,2,30); 今天是3月30号
  var year = now.getFullYear();//getYear()+1900=getFullYear()
  var month = now.getMonth() + 1;//0-11表示1-12月
  var day = now.getDate(); // 当天日期
  if (parseInt(month) < 10) month = "0" + month;
  if (parseInt(day) < 10) day = "0" + day;
  now = year + '-' + month + '-' + day; // 如果取当月日期可直接 return 返回

  var preMonth = parseInt(month)  - 1;
  preMonth = preMonth < 10 ? '0' + preMonth : preMonth; // 获取上个月的值
  var nextMonth = parseInt(month) + 1;
  nextMonth = nextMonth < 10 ? '0' + nextMonth : nextMonth; // 获取下个月的值

  if (parseInt(month) == 1 && type == -1) {//如果是1月份,要上个月 ,则取上一年的12月份
      return (parseInt(year) - 1) + '-12-' + day;
  } else if (parseInt(month) == 12 && type == 1) { // 如果是12月,要下个月,取下一年的1月
      return (parseInt(year) + 1) + '-01-' + day;
  }

  var preSize  = new Date(year, parseInt(month) - 1, 0).getDate();//上月总天数
  var nextSize = new Date(year, parseInt(month)+ 1, 0).getDate();//下月总天数
  //console.log(preSize, nextSize)
  if (preSize < parseInt(day) && type == -1) {// 取上个月,如果上个月总天数小于本月今天,取上个月最后一天
      return year + '-' + preMonth + '-' + preSize;
  } else if (nextSize < parseInt(day) && type == 1) { // 如果下个月总天数小于本月今天,取下个月最后一天
      return year + '-' + nextMonth + '-' + nextSize;
  }

  if (type == -1) {
      return year + '-' + preMonth + '-' + day;
  } else if (type == 1) {
      return year + '-' + nextMonth + '-' + day;
  }else if(type == 0){
      return now;
  }
}

获取当前月的第一天

function startDayThisMonth(){
  var date = new Date();
  date.setDate(1);
  var month = parseInt(date.getMonth()+1);
  var day = date.getDate();
  if (month < 10) month = '0' + month;
  if (day < 10) day = '0' + day;
  return date.getFullYear() + '-' + month + '-' + day;
}

获取当前月的最后一天

function endDayThisMonth(){
  var date = new Date();
  var currentMonth=date.getMonth();
  var nextMonth=++currentMonth;
  var nextMonthFirstDay=new Date(date.getFullYear(),nextMonth,1);
  var oneDay=1000*60*60*24;
  var lastTime = new Date(nextMonthFirstDay-oneDay);
  var month = parseInt(lastTime.getMonth()+1);
  var day = lastTime.getDate();
  if (month < 10) month = '0' + month;
  if (day < 10) day = '0' + day;
  return date.getFullYear() + '-' + month + '-' + day;
}

获取某年某月总天数

function getDaysInOneMonth(y,m){
  m = parseInt(m,10);
  var day = new Date(y, m, 0);
  return day.getDate();
}

获取当天日期 - 年月日

function getTodayTime() {
  var now = new Date();
  var year = now.getFullYear();
  var mth = now.getMonth();
  var day = now.getDate();
  var month = mth + 1;
  if (month < 10) month = '0' + month;
  if (day < 10) day = '0' + day;
  var str = year + '-' + month + '-' + day;
  return str;
}

获取当天日期 - 年月日时分秒

function getTodayDateTime() {
  var now = new Date();
  var year = now.getFullYear();
  var mth = now.getMonth();
  var day = now.getDate();
  var h = now.getHours();
  var m = now.getMinutes();
  var s = now.getSeconds();
  var month = mth + 1;
  if (month < 10) month = '0' + month;
  if (day < 10) day = '0' + day;
  if (h < 10) h = '0' + h;
  if (m < 10) m = '0' + m;
  if (s < 10) s = '0' + s;
  var str = year + '-' + month + '-' + day + ' ' + h + ':' + m + ':' + s;
  return str;
}

获取上一年/年月/年月日的前n年/年月/年月日

console.log(getStartTime('d')); //昨天
console.log(getStartTime('d',-1)); //前天
// opt:d/m/y
function getStartTime(opt,day) {
    var nowDate = new Date();
    var now = new Date();
    var year = now.getFullYear();
    var mth = (now.getMonth());
    var str;
    if (opt == 'd') { //获取一天前的数据
        nowDate.setTime(nowDate.getTime()-24*60*60*1000);
        var dYear= nowDate.getFullYear();
        var dMonth = nowDate.getMonth()+1;
        var dDay = nowDate.getDate();
        if('undefined' != typeof(day)){
            dDay = nowDate.getDate() + day;
        }
        if (dMonth < 10) {
            dMonth = '0' + dMonth
        }
        if(dDay< 10){
            dDay = '0' + dDay;
        }
        str = dYear + '-' + dMonth + '-' + dDay;
    } else if (opt == 'm') {
        if(mth==0){
            mth =12;
            year = year-1;
        }
        if (mth < 10) {
            mth = '0' + mth;
        }
        str = year + '-' + mth;
    }else if (opt == 'y') {
        str = year-1;
    }
    return str;
}

获取当天/年/年月/年月日

function getEndTime(opt) {
    var now = new Date();
    var year = now.getFullYear();
    var mth = now.getMonth();
    var day = now.getDate();
    var month = mth + 1;
    if (month < 10) {
        month = '0' + month
    }
    if (day < 10) {
        day = '0' + day
    }
    var str;
    if (opt == 'd') {
        str = year + '-' + month + '-' + day;
    } else if (opt == 'm') {
        str = year + '-' + month;
    }else if (opt == 'y') {
        str = year;
    }
    return str;
}

获取指定日期n天后的日期

// day 传-1表始前一天,传1表始后一天
// date 代表指定的日期,格式:2018-09-27
function getNextDate(date,day) {
  var dd = new Date(date);
  dd.setDate(dd.getDate() + day);
  var y = dd.getFullYear();
  var m = dd.getMonth() + 1 < 10 ? "0" + (dd.getMonth() + 1) : dd.getMonth() + 1;
  var d = dd.getDate() < 10 ? "0" + dd.getDate() : dd.getDate();
  return y + "-" + m + "-" + d;
};

返回两个时间之间所有的月份

需要引入<script src="http://cdn.staticfile.org/moment.js/2.24.0/moment.min.js"><script>

console.log(getMonthBetween('2022-11-05', '2023-02-05'));
// ['2022-11', '2022-12', '2023-01', '2023-02']
function getMonthBetween(start, end){
  var result = [];
  var s = start.split("-");
  var e = end.split("-");
  var min = new Date();
  var max = new Date();
  var yearMonthCode;
  min.setFullYear(s[0], s[1] * 1 - 1, 1);//开始日期
  max.setFullYear(e[0], e[1] * 1 - 1, 1);//结束日期
  var curr = min;
  while (curr <= max) {
      yearMonthCode = moment(curr).format('YYYY-MM')
      var month = curr.getMonth();
      var str = curr.getFullYear() + "-" + (month);
      var s = curr.getFullYear() + "-0";
      if (str == s) {
          str = curr.getFullYear() + "-1";
      }
      result.push(yearMonthCode);
      curr.setMonth(month + 1);
  }
  return result;
}

返回两个时间之间所有的日期

console.log(getTimeTwo('2022-04-28', '2022-04-30'));
function getTimeTwo(start, end){
  //初始化日期列表,数组
  var diffdate = new Array();
  var i = 0;
  //开始日期小于等于结束日期,并循环
  while (start <= end) {
      diffdate[i] = start;
      //获取开始日期时间戳
      var stime_ts = new Date(start).getTime();
      //增加一天时间戳后的日期
      var next_date = stime_ts + (24 * 60 * 60 * 1000);
      //拼接年月日,这里的月份会返回(0-11),所以要+1
      var next_dates_y = new Date(next_date).getFullYear() + '-';
      var next_dates_m = (new Date(next_date).getMonth() + 1 < 10) ? '0' + (new Date(next_date).getMonth() + 1) + '-' : (new Date(next_date).getMonth() + 1) + '-';
      var next_dates_d = (new Date(next_date).getDate() < 10) ? '0' + new Date(next_date).getDate() : new Date(next_date).getDate();
      start = next_dates_y + next_dates_m + next_dates_d;
      //增加数组key
      i++;
  }
  return diffdate;
}

获取某年某个月一共有多少天

var year = '2022';
var month = 4;
var days = new Date(year,month,0).getDate(); //30

判断两个时间大小

var difftime = getTimeDiff(startT, endT);
console.log(difftime); 
// >0 结束时间小于开始时间
// <0 结束时间大于开始时间
window.getTimeDiff = function (start_date, end_date) {
  var start_date = new Date(start_date);
  var end_date = new Date(end_date);
  var difftime = (start_date - end_date) / 1000;
  return difftime;
}

两数相加

console.log(accAdd(6,3)); //9
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 
}

两数相减

console.log(subtr(6,3)); //3
function subtr(arg1,arg2){ 
  var r1,r2,m,n; 
  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)); 
  n=(r1>=r2)?r1:r2; 
  return ((arg1*m-arg2*m)/m).toFixed(n); 
}

两数相乘

console.log(accMul(6,3)); //18
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) 
} 

两数相除

console.log(accDiv(6,3)); //2
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 accMul((r1/r2),pow(10,t2-t1)); 
   } 
} 

判断是否为整数

console.log(isInteger(1)); //true
console.log(isInteger(1.5)); //false
function isInteger(num){
  num = Number(num);
  return num%1 === 0
}

强制转换两位小数

console.log(toDecimal2(1.2656)); // 1.27
console.log(toDecimal2(1)); // 1.00
function toDecimal2(x){
  var f = parseFloat(x);
  if(isNaN(f)){
    return false;
  }
  var f = Math.round(x * 100) / 100;
  var s = f.toString();
  var rs = s.indexOf('.');
  if (rs < 0) {
    rs = s.length;
    s += '.';
  }
  while (s.length <= rs + 2) {
    s += '0';
  }
  return s;
}

获取表单对象

var params = $('#form').serializeObject();
$.fn.serializeObject = function () {
  var o = {};
  var a = this.serializeArray();
  $.each(a, function () {
    if (o[this.name]) {
      if (!o[this.name].push) {
        o[this.name] = [o[this.name]];
      }
      o[this.name].push(this.value || '');
    } else {
      o[this.name] = this.value || '';
    }
  });
  return o;
};

获取地址栏参数

var getParams = getQueryString();
console.log(getParams);
function getQueryString() {
  var url = location.search; //获取url中"?"符后的字串
  if (url.length > 0) { //判断是否携带参数
      var params = {};
      if (url.indexOf('?') != -1) {
          this.isShwoInput = true;
          var str = url.substr(url.indexOf('?') + 1);
          var strs = str.split('&');
          for (var i = 0; i < strs.length; i++) {
              params[strs[i].split('=')[0]] = decodeURI(strs[i].split('=')[1]);
          }
      }
      return params;
  }
  return null;
}

点击使元素全屏

$('#fullScreen').click(function(){
  var dom = document.getElementById('previewDialog');
  fullScreenOn(dom);
})
window.fullScreenOn = function(el){
  var rfs = el.requestFullScreen || el.webkitRequestFullScreen || el.mozRequestFullScreen || el.msRequestFullScreen, wscript;
  if(typeof rfs != "undefined" && rfs) {
    rfs.call(el);
    return;
  }
  if(typeof window.ActiveXObject != "undefined") {
    wscript = new ActiveXObject("WScript.Shell");
    if(wscript) {
      wscript.SendKeys("{F11}");
    }
  }
}

图片加载失败显示默认图片

<img class='avatar' src='' onerror='nofind(this);'>

方法1:

function nofind(img){ 
    img.src = "/img/fantasy_indexhead.png"; 
    img.onerror = null; //如果错误图片也不存在就会死循环一直跳,所以要设置成null,也可以不加
}

方法2:

$(".avater").one("error", function(e){  //加入相应的图片类名
     $(this).attr("src", "/img/fantasy_indexhead.png");
});

判断奇偶 - es6

let OddEven = num => !!(num & 1) ? "odd" : "even";
let num = OddEven(2);
// num => "even"

数组求和

funtion sum(arr){
  var s = 0;
  if(arr.length == 0){
      return 0;
  }else if(arr.length == 1){
      return arr[0];
  }else{
      for(var i = 0; i < arr.length; i++){
          s += arr[i];
      }
      return s;
  }
}

去重数组

方法1:

let arr = [...new Set([0, 1, 1, null, null])];
// arr => [0, 1, null]

方法2:

function norepeat(a) { 
  var i = a.length, j, b; 
  while (i--) { 
    j = i; 
    b = false; 
    while (j--) { 
        if (a[i] === a[j]) { 
            a.splice(j, 1); 
            i--; 
            b = true; 
        } 
    } 
    if (b) a.splice(i, 1); 
  } 
  return a;
} 

过滤空值 - es6

let arr = [undefined, null, "", 0, false, NaN, 1, 2].filter(Boolean);
// arr => [1, 2]

取最小最大值 - es6

let arr = [0, 1, 2];
let min = Math.min(...arr);
let max = Math.max(...arr);
// min max => 0 2

满足条件时执行

var flagA = true; // 条件A
var flagB = false; // 条件B
(flagA || flagB) && Func(); // 满足A或B时执行
(flagA || !flagB) && Func(); // 满足A或不满足B时执行
flagA && flagB && Func(); // 同时满足A和B时执行
flagA && !flagB && Func(); // 满足A且不满足B时执行

取整简写

const num1 = ~~ 1.69;
const num2 = 1.69 | 0;
const num3 = 1.69 >> 0;
// num1 num2 num3 => 1 1 1 

数组首部插入数组[0]

let arr = [1, 2];

方法1:

arr.unshift(0);

方法2:

arr = [0].concat(arr);

方法3:

arr = [0, ...arr];

方法4:

Array.prototype.unshift.apply(arr, [0]);

合并对象

const obj1 = { a: 0, b: 1, c: 2 };
const obj2 = { c: 3, d: 4, e: 5 };
var obj = $.extend({}, obj1, obj2);
// obj => { a: 0, b: 1, c: 3, d: 4, e: 5 }

地址栏传参编码

var url = "http://example.com/index.html?url=" + encodeURIComponent(myUrl);

地址栏接收参数编码

decodeURIComponent(url.substring(url.indexOf('url=')+4))

微信浏览器中,aler弹框不显示域名

(function(){
  //先判断是否为微信浏览器
  var ua = window.navigator.userAgent.toLowerCase();
  if (ua.match(/MicroMessenger/i) == 'micromessenger') {
    //重写alert方法,alert()方法重写,不能传多余参数
    window.alert = function(name){
      var iframe = document.createElement("IFRAME");
      iframe.style.display="none";
      iframe.setAttribute("src", 'data:text/plain');
      document.documentElement.appendChild(iframe);
      window.frames[0].window.alert(name);
      iframe.parentNode.removeChild(iframe);
    }
  }
})();

DOM添加类

document.querySelector(".room").classList.add("blur");

生成范围随机数

// ----------1-100随机数----------------
Math.floor(Math.random () * 100 + 1)
// ----------60-100随机数----------------
Math.floor(Math.random() * 41 ) + 60
// 
const RandomNum = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;
const num = RandomNum(1, 10);

倒计时-每1秒减一个数

<b><span id="usernum">5</span> seconds</b>
var t = document.getElementById("usernum");
var sa = setInterval(function(){
    --t.innerHTML;
    if(t.innerHTML == 120){
        clearInterval(sa);
    }
    document.getElementById("usernum").innerHTML = t;
},1000);

去掉字符串空格

// 去前后空格
str.replace(/(^\s*)|(\s*$)/g, "");
// 去所有空格
str.replace(/\s/g, "");
// 去前空格
str.replace(/(^\s*)/g, "");
// 去后空格
str.replace(/(\s*$)/g, "");

去掉后缀名

function removeSuffix(str){ 
    return str.replace(/\.\w+$/, ""); 
}

绑定滚动条事件--滚动到某一位置时显示固定导航

$(window).bind("scroll", function () {
    var sTop = $(window).scrollTop();
    var sTop = parseInt(sTop);
    if (sTop >= 350) {
        if (!$(".bot_float").is(":visible")) {
            try {
                $(".bot_float").slideDown();
            } catch (e) {
                $(".bot_float").show();
            }
        }
    }else {
        if ($(".bot_float").is(":visible")) {
            try {
                $(".bot_float").slideUp();
            } catch (e) {
                $(".bot_float").hide();
            }
        }
    }
});

随着浏览器往下滚动,根据距离顶部的距离,判断当前选中的导航菜单

$(window).bind("scroll", function () {
    var $navs = $('.nav-ul li'),          // 导航
    $sections = $('.section'),       // 模块
    $window = $(window),
    navLength = $navs.length - 1;
    var scrollTop = $window.scrollTop(),
    len = navLength;
    for (; len > -1; len--) {
        var that = $sections.eq(len);
        if (scrollTop >= (that.offset().top - 300)) {
           $navs.removeClass('yellowi').eq(len).addClass('yellowi');
           break;
        }
    }
});

鼠标放上时向上移动,移开时回到原点

$(".dibiao .tab").mouseover(function(){
    $(this).stop().animate({
        top:"-10px"
    },600);
});
$(".dibiao .tab").mouseout(function(){
    $(this).stop().animate({
        top:"0px"
    },600);
});

点击上移图标上移,点击下移图标下移

// 上移
$(".moveup").click(function () {
	var prev = $(this).parent().prev();
	$(this).parent().insertBefore(prev);
})
// 下移
$(".movedown").click(function () {
	var next = $(this).parent().next();
	$(this).parent().insertAfter(next);
})

点击下载图片

$("body").on('click','.download',function(){
  var imgSrc = $('.img').attr('src');
  downloadImg(imgSrc);
  return false;
})
function downloadImg(imgSrc){
  var xmlhttp;
    xmlhttp = new XMLHttpRequest();   //用于在后台与服务器交换数据
    xmlhttp.open("GET", imgSrc, true);   //语法  open(method,url,async)
    xmlhttp.responseType = "blob"; // 请求返回的数据类型
    xmlhttp.onload = function() { //处理返回的数据
      if (this.status == 200) {
        var blob = this.response;
        var a = document.createElement('a');
        a.href = window.URL.createObjectURL(blob); //图片地址
        a.download = 'down.jpg'; //下载时 图片命名    如果没有默认是下载的图片的路径
        document.body.appendChild(a);
        a.click();
        document.body.removeChild(a);
      }
    }
    xmlhttp.send();   //用于发送http请求
}

each循环return fasle无效解决方法

var flag = true;
$el.each(function(i){
  if(true){
    alert("请输入...");
    flag = false;
    return false;
  }
})
if(!flag){
  return false;
}