工作中的小总结

  1. $.ajax()获取后台数据中,在IE浏览器的兼容问题
crossDomain: true == !(document.all)
  1. 字体超出省略号显示
//一行显示超出
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
//多行超多显示
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;
  1. 时间戳转换为日期
//根据时间戳转化为日期格式
function timestamp(ele) {
    var date = new Date(ele);
    var y = date.getFullYear();
    var m = date.getMonth() + 1;
    m = m < 10 ? ('0' + m) : m;
    var d = date.getDate();
    d = d < 10 ? ('0' + d) : d;
    return y + '-' + m + '-' + d;

}
   //根据时间戳转化为时分秒
   function formatDuring(mss) {
       var days = parseInt(mss / (1000 * 60 * 60 * 24));
       var hours = parseInt((mss % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
       var minutes = parseInt((mss % (1000 * 60 * 60)) / (1000 * 60));
       var seconds = (mss % (1000 * 60)) / 1000;
       return hours + " 小时 " + minutes + " 分钟 ";
   }
   //根据时间判断星期几
function getWeek(timedat) { //timedat参数格式:   getWeek(new Date("2017-10-27" ))

    var week;

    if (timedat.getDay() == 0) week = "星期日";
    if (timedat.getDay() == 1) week = "星期一";
    if (timedat.getDay() == 2) week = "星期二";
    if (timedat.getDay() == 3) week = "星期三";
    if (timedat.getDay() == 4) week = "星期四";
    if (timedat.getDay() == 5) week = "星期五";
    if (timedat.getDay() == 6) week = "星期六";
    return week;
}

//获取星期几
function date() {
    //时间格式转换
    var newDate = dateToStr(new Date());
    //获取当天是星期几
    var ji = "日一二三四五六".charAt(new Date().getDay());
    var xingqi = " 星期" + ji + '  ' + newDate;
    return xingqi;
}
function dateToStr(datetime) {
    var year = datetime.getFullYear();
    var month = datetime.getMonth() + 1; //js从0开始取 
    var date = datetime.getDate();
    var hour = datetime.getHours();
    var minutes = datetime.getMinutes();
    var second = datetime.getSeconds();
    if (month < 10) {
        month = "0" + month;
    }
    if (date < 10) {
        date = "0" + date;
    }
    if (hour < 10) {
        hour = "0" + hour;
    }
    if (minutes < 10) {
        minutes = "0" + minutes;
    }
    if (second < 10) {
        second = "0" + second;
    }

    // var time = year + "-" + month + "-" + date + " " + hour + ":" + minutes + ":" + second;
    var times = hour + ":" + minutes + ":" + second; //返回时分秒
    return times;
}
  1. art-template模板中的多条件判断

html代码:

<td id="orderStatus" width="25%">{{if obj.orderStatus==0}} 取消订单 {{else if obj.orderStatus==1}} 等待报价 {{else if obj.orderStatus==2}} 报价完成 {{else if obj.orderStatus==3}} 确认定制 {{else if obj.orderStatus==4}} 平台受理 {{else if obj.orderStatus==5}} 已付定金 {{else if obj.orderStatus==6}}
                                定制中 {{else if obj.orderStatus==7}} 已发货 {{else if obj.orderStatus==8}} 已付尾款 {{else if obj.orderStatus==9}} 完成订单 {{/if}}</td>
  1. 库和框架的区别
    库:库是更多是一个封装好的特定的集合,提供给开发者使用,而且是特定于某一方面的集合(方法和函数),库没有控制权,控制权在使用者手中,在库中查询需要的功能在自己的应用中使用,我们可以从封装的角度理解库;
    框架:框架顾名思义就是一套架构,会基于自身的特点向用户提供一套相当于叫完整的解决方案,而且控制权的在框架本身,使用者要找框架所规定的某种规范进行开发。

  2. JavaScript中的find()方法不能再IE12以下的浏览器中使用,如何解决

在代码中加入即可
				if(!Array.prototype.find){
                        Array.prototype.find = function(callback) {
                            return callback && (this.filter(callback)|| [])[0];
                        };
                    }
  1. JavaScript中的fill()方法不能再IE12以下的浏览器中使用,如何解决
放在fill()方法前
		 if (!Array.prototype.fill) {
                Object.defineProperty(Array.prototype, 'fill', {
                  value: function(value) {
              
                    // Steps 1-2.
                    if (this == null) {
                      throw new TypeError('this is null or not defined');
                    }
              
                    var O = Object(this);
              
                    // Steps 3-5.
                    var len = O.length >>> 0;
              
                    // Steps 6-7.
                    var start = arguments[1];
                    var relativeStart = start >> 0;
              
                    // Step 8.
                    var k = relativeStart < 0 ?
                      Math.max(len + relativeStart, 0) :
                      Math.min(relativeStart, len);
              
                    // Steps 9-10.
                    var end = arguments[2];
                    var relativeEnd = end === undefined ?
                      len : end >> 0;
              
                    // Step 11.
                    var final = relativeEnd < 0 ?
                      Math.max(len + relativeEnd, 0) :
                      Math.min(relativeEnd, len);
              
                    // Step 12.
                    while (k < final) {
                      O[k] = value;
                      k++;
                    }
              
                    // Step 13.
                    return O;
                  }
                });
              }

比如(放在后面的时候没生效,依旧报错,我不知道为什么)
在这里插入图片描述
8. json数组对象,如何取出其中一部分,组成新数组对象

方法一:
在这里插入图片描述
方法二:
在这里插入图片描述
9.怎么处理多层Json数据循环遍历的问题
链接:https://blog.csdn.net/qq_41485414/article/details/82318964添加链接描述
在这里插入图片描述
10.关于后端返回文件内容,前端下载文件问题
我这里使用创建a标签的形式去下载文件

url地址:web_cer_down.cgi 需要传三个参数order(请求方式),sessionid(特别标识,跟token相似),file(文件名)

		var _a =document.createElement("a");
		_a.setAttribute("href","../../cgi-bin/web_cer_down.cgi?order="+order+"&sessionid="+sessionid+"&file="+name);
		_a.setAttribute('download', name);
		anchorEl.appendChild(_a);
		_a.click();

在 HTML5 中,download 属性是 a 标签的新属性。

<a download="filename">     (filename	规定作为文件名来使用的文本)

download 属性规定被下载的超链接目标。在 a 标签中必须设置 href 属性。
该属性也可以设置一个值来规定下载文件的名称。所允许的值没有限制,浏览器将自动检测正确的文件扩展名并添加到文件 (.img, .pdf, .txt, .html, 等等)。
只有 Firefox 和 Chrome 支持 download 属性
在这里插入图片描述
解决方法:

	            const uA = window.navigator.userAgent//判断浏览器内核
				const isIE = /msie\s|trident\/|edge\//i.test(uA) && !!("uniqueID" in document || "documentMode" in document || ("ActiveXObject" in window) || "MSInputMethodContext" in window);

				var anchorEl = document.getElementById("anchor");//我的页面中的结构由来放创建的a标签
				anchorEl.innerHTML = "";
				var _a = document.createElement("a");
				_a.href = "../../cgi-bin/web_cer_down.cgi?order=" + order + "&sessionid=" + sessionid + "&file=" + name;
				_a.download = name;
				anchorEl.appendChild(_a);
				if (isIE) {
					// 兼容IE11无法触发下载的问题        
					navigator.msSaveBlob(new Blob([resp]),_a.download);
				  } else {
					_a.click();
				
				  }
				loadingEffect('remove');
				_a.addEventListener('click', function() {
					URL.revokeObjectURL(_a.href);
					anchorEl.removeChild(_a);
				  });

11.获取鼠标坐标

  1. PageX/PageX:鼠标在页面上的位置,从页面左上角开始,即是以页面为参考点,不随滑动条移动而变化
  2. clientX/clientY:鼠标在页面上可视区域的位置,从浏览器可视区域左上角开始,即是以浏览器滑动条此刻的滑动到的位置为参考点,随滑动条移动 而变化.可是悲剧的是,PageX只有FF特有,IE这个悲剧没有啊T_T,所以大牛们想出了一个办法PageY=clientY+scrollTop-clientTop;(只讨论Y轴,X轴同理,下同)
  3. screenX/screenY:鼠标在屏幕上的位置,从屏幕左上角开始(w3c标准)
  4. offsetX/offsetY:IE特有,鼠标相比较于触发事件的元素的位置,以元素盒子模型的内容区域的左上角为参考点,如果有boder,可能出现负值

12.多文件下载功能

rows为后台返回的数组,使用闭包来实现所有文件的下载,不然会因为速度太快只下载几个文件
for (var i = 0; i < rows.length; i++) {

          (function (a) {
            setTimeout(function () {
              console.log(rows[a].substring(rows[a].indexOf("2")));
              const anchorEl = document.getElementById("downRoom");
              anchorEl.innerHTML = "";
              const _a = document.createElement("a");

              _a.setAttribute("href", rows[a]);
              _a.setAttribute("download", rows[a].substring(rows[a].indexOf("2")));
              anchorEl.appendChild(_a);
              _a.click();
              $(_a).remove();

            }, a *1000); 
          })(i)              
        }

13.我用到的弹框插件
(1)SweetAlert

 swal({
              title: "导出成功!",
              confirmButtonText: "确定",
            });

还有很多参数可以设置:

title:提示框标题。

text:提示内容。

type:提示类型,有:success(成功),error(错误),warning(警告),input(输入)。

showCancelButton:是否显示“取消”按钮。

animation:提示框弹出时的动画效果,如slide-from-top(从顶部滑下)等。

html:是否支持html内容。

timer:设置自动关闭提示框时间(毫秒)。

showConfirmButton:是否显示确定按钮。

confirmButtonText:定义确定按钮文本内容。

imageUrl:定义弹出框中的图片地址。

SweetAlert插件的更多信息可以访问github项目网址:https://github.com/t4t5/sweetalert
(2)jQuery BlockUI
$.blockUI(); // 打开
$.unblockUI(); // 关闭
具体用法,例如:

 $.blockUI({
        message: '<div>下载中...</div>',
        css: {
          width: '300px',
          height: '150px',
          lineHeight: '150px',
          fontSize: '24px',
          left: ($(window).width() - 300) / 2 + 'px',
          top: ($(window).height() - 300) / 2 + 'px',
          border: 'none',
          borderRadius: '5px'
        },
        overlayColor: "#67809F",
        overlayCSS: {
          backgroundColor: '#555',
          opacity: 0.5,
          cursor: 'wait'
        }
      });

参数设置及用法:

message : 弹出框的信息,可以为html,默认为:<h1>Please wait...</h1>
  如:$.blockUI({message:'这是测评'});
        $.blockUI({message:$("#test")}); 
title : 弹窗标题,默认 null ,只能在 theme 为true 的时候使用
theme : 默认 false ,设置为 true 时将使用jqueryUI的 theme
draggable : 是否可拖动,默认 true
css : 弹窗的css样式
overlayCSS : 遮罩层的样式,可以设置背景颜色,透明度,鼠标样式
cursorReset : 等待消息返回是鼠标样式重置,默认为Default
growlCSS : 使用$.growlUI完成弹窗时的样式
baseZ: 弹窗的z-index,默认1000,一般不需要修改,越大越在上面
centerX: 水平居中,默认为 true
centerY: 竖直居中,默认为 true
bindEvents:  遮罩时是否禁用键盘和鼠标事件,默认为 true
constrainTabKey: 遮罩内容的Tab导航是否可用,默认为 true
fadeIn : 淡入时间,默认为 200
fadeOut : 淡出时间,默认为 400
timeout : 自动淡出时间 默认为 0,不自动淡出
showOverlay : 是否自动遮罩 默认为 true
focusInput : 弹窗后自动获得焦点 默认为 true
onBlock : 弹窗完成后的回调,可自行定义function,默认为 null 
onUnblock : 弹窗解锁后的回调,可自行定义function,默认为 null 

14.将数组合并为新的数组

var obj = {
    "1": [111, 222],
    "2": [333],
    "3": [444, 555]
};
改为obj = [111,222,333,444,555]
方法1:使用es6语法中的...扩展运算符
var obj = {
    "1": [111, 222],
    "2": [333],
    "3": [444, 555]
};
var arr = [];
for(var i in obj){
    arr.push(...obj[i]);
}
console.log(arr);
方法2:双层循环
var obj = {
    "1": [111, 222],
    "2": [333],
    "3": [444, 555]
};
var arr = [];
for(var i in obj){
    for(var j in obj[i]){
        arr.push(obj[i][j]);
    }    
}
console.log(arr);
方法3:使用concat()方法
var arr = [];
for(var i in obj){
    arr=arr.concat(obj[i]);
}
console.log(arr);

15.bootstrap-table中新增一行数据

/**
 * 新增一行数据
 */
function addRow(){
    var count = $('#table_add').bootstrapTable('getData').length;
    // newFlag == 1的数据为新规的数据
    $('#table_add').bootstrapTable('insertRow',{index:count,row:{newFlag:"1"}});
}
 注:index:count,其中count是新增行的位置,上就是在表格末尾处新增一行

16.bootstrap-table中实现添加条数,删除条数,同时又能修改的功能

beforeData1 = [];
							resdata.data.forEach((item, index) => {
								beforeData1.push({
									"cslbm": item.cslbm, //场所类型
									"cslcm": item.cslcm, //场所楼层
									"csfjm": item.csfjm, //场所房间号
									"cszwbjfsm": item.cszwbjfsm, //座位布局方式
									"cszwqswzm": item.cszwqswzm, //座位起始位置
									"cszwplfsm": item.cszwplfsm, //座位排列方式
									"csfjrl": item.csfjrl, //房间容量
									"uuid": item.uuid,
									"csmc": item.csmc//场所名称
								});
								for (let i = 0; i < beforeData1.length; i++) {
									if (beforeData1[i].csuuid == '') {
										beforeData1[i].method = "new";

									} else {
										beforeData1[i].method = "modify";
									}

								}

							});
var rows = $('#sbgltable').bootstrapTable("getData");
		// console.log(rows);
		// console.log(rows, 'rows', beforeData1, 'beforedata1');
		var jsont = [];
		rows.forEach(function (item) {
			jsont.push({
				"cslbm": item.cslbm, //场所类型
				"cslcm": item.cslcm, //场所楼层
				"csfjm": item.csfjm, //场所房间号
				"cszwbjfsm": item.cszwbjfsm, //座位布局方式
				"cszwqswzm": item.cszwqswzm, //座位起始位置
				"cszwplfsm": item.cszwplfsm, //座位排列方式
				"csfjrl": item.csfjrl, //房间容量
				"uuid": item.uuid,
				"csmc": item.csmc//场所名称
			});

		})
		console.log(jsont,"jsont")
		for (let i = 0; i < jsont.length; i++) {
			if (jsont[i].uuid == '' || jsont[i].uuid == undefined) {
				jsont[i].method = "new";
				jsont[i].uuid = '';
			} else {
				jsont[i].method = "modify";
			}
		}
		var result = [];
		var flag = false;
		while (beforeData1.length > jsont.length) {
			// 删除
			for (var i = beforeData1.length - 1; i > -1; i--) {
				jsont.forEach((item, j) => {
					if (item.uuid == beforeData1[i].uuid) {
						flag = true
						// console.log(2222)
					}
				})
				if (!flag) {
					console.log(111111);
					beforeData1[i].method = "delete"
					result.push(beforeData1[i]);
					beforeData1.splice(i, 1)
				}
				flag = false
			}
		}
		console.log(beforeData1, 'before')

		while (beforeData1.length < jsont.length) {
			// 新增
			for (var i = jsont.length - 1; i > -1; i--) {
				beforeData1.forEach((item, j) => {
					if (item.uuid == jsont[i].uuid) {
						flag = true
					}
				})
				if (!flag) {
					result.push(jsont[i])
					jsont.splice(i, 1)
				}
				flag = false
			}
		}
		beforeData1.forEach((item, i) => {
			Object.keys(item).forEach(k => {
				// 修改
				if (item[k] !== jsont[i][k]) {
					flag = true;
				}
			})
			if (flag) {
				result.push(jsont[i])

			}
			flag = false
		})
		console.log(result, 'result')

16.给数组对象中新增属性,类型如下
arr = [{a:1,jarr_zbrys:[{b:1,c:1},{b:1,c:1}]},{a:2,jarr_zbrys:[{b:2,c:2},{b:2,c:2}]},{a:3,jarr_zbrys:[{b:3,c:3},{b:3,c:3}]}];
改为:arr1 = [{b:1,c:1,a:1},{b:1,c:1,a:1},{b:2,c:2,a:2},{b:2,c:2,a:2},{b:3,c:3,a:3},{b:3,c:3,a:3}]

        var zbsj =  [{a:1,jarr_zbrys:[{b:1,c:1},{b:1,c:1}]},{a:2,jarr_zbrys:[{b:2,c:2},{b:2,c:2}]},{a:3,jarr_zbrys:[{b:3,c:3},{b:3,c:3}]}];
        var jarr = [];
        var newData = [];
        var data=[];
        //将a写进jarr_zbrys的对象中 
        for (var i = 0; i < zbsj.length; i++) {
          jarr = zbsj[i].jarr_zbrys
          for (var j = 0; j < jarr.length; j++) {
            jarr[j]["a"] = zbsj[i].a;
          }
          data.push(jarr)
        }
        console.log(data);      //[[],[],[]] 这种形式,还需要拆分 [Array(2), Array(2), Array(2)]
       // 第一种(遍历两次,麻烦)
        data.forEach((item, index, arr) => {
          item.forEach((j, i, row) => {
            newData.push(j)
          })
        })
        //第二种 (这个时候用到上面14条的多种方法了)
        for(var i in data){
    		newData=newData.concat(data[i]);
		}
		//第三种
        console.log(newData);  // [{…}, {…}, {…}, {…}, {…}, {…}]

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值