关于js

js,哎

VUE修改v-for数据后,页面数据不更新

改完数组对象之后,执行以下代码

1
this.$forceUpdate();

看看这些被同事喷的JS代码风格你写过多少

代码举例,摘自网络

高级前端js进阶 学习链接->

前端时间格式的转换 2019-09-09T16:00:00.000Z

1
2
3
4
5
6
7
8
9
//转换时间格式,难免后端会传递些奇怪的东西,所以遇到了就记录下吧。`_`
formateDate(datetime) {
function addDateZero(num) {
return (num < 10 ? "0" + num : num);
}
let d = new Date(datetime);
let formatdatetime = d.getFullYear() + '-' + addDateZero(d.getMonth() + 1) + '-' + addDateZero(d.getDate()) + ' ' + addDateZero(d.getHours()) + ':' + addDateZero(d.getMinutes()) + ':' + addDateZero(d.getSeconds());
return formatdatetime;
}

Promise简单使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
let promise = new Promise((resolve, reject) => {
//做一些异步操作
var userNowLocation = $api.getStorage('userNowLocation');
var GoogleMap = api.require('googleMap');
(function(i){
GoogleMap.getDistance({
start: {
lon: userNowLocation.lon,
lat: userNowLocation.lat
},
end: {
lon: adminOpenedCity[i].longitude,
lat: adminOpenedCity[i].latitude
}
}, function(ret) {
if (ret.status) {
adminOpenedCity[i].distance = ret.distance;
resolve(adminOpenedCity[i]);
}else {
reject('当前GPS信号弱!');
}
});
})(i);
});
promise.then((data) => {
console.log(JSON.stringify(data));
})
// .then((data) => {
// console.log(JSON.stringify(data));
// })
// .then((data) => {
// console.log(JSON.stringify(data));
// });

pc端禁止input数字框滚动,消除上下箭头,只能输入>=0的整数和小数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<style>
input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{
-webkit-appearance:textfield;
}
input[type="number"]{
-moz-appearance:textfield;
}
</style>
<input type="number" onkeyup="this.value=this.value.replace(/[^\d.]/g, '').replace(/\.{2,}/g, '.').replace('.', '$#*').replace(/\./g,'').replace(/^[0]+[0-9]/,'').replace('$#*','.').replace(/^(\d+)\.(\d\d).*$/, '$1.$2')" onafterpaste="this.value=this.value.replace(/[^\d.]/g, '').replace(/\.{2,}/g, '.').replace('.', '$#*').replace(/\./g,'').replace(/^[0]+[0-9]/,'').replace('$#*','.').replace(/^(\d+)\.(\d\d).*$/, '$1.$2')" lay-verify="required" onmousewheel="scrollFunc()" onDOMMouseScroll="scrollFunc()" name="entertainment_fee" placeholder="请输入金额" autocomplete="off" class="layui-input">

<script>
function scrollFunc(evt) {
evt = evt || window.event;
if(evt.preventDefault) {
// Firefox
evt.preventDefault();
evt.stopPropagation();
} else {
// IE
evt.cancelBubble=true;
evt.returnValue = false;
}
return false;
}
layui.use(['form', 'code'], function() {
form = layui.form;

layui.code();

$('#address').xcity('安徽','合肥市','蜀山区');
// $('select[name="area"]')[0].length = $('select[name="area"]')[0].length -2;

});
</script>

从后端返回的富文本中把图片取出来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var reg = /\<img[^\>]*[\/]?\>/ig;
ret.content = ret.centent.replace(/<[^>]+>/g, "");//取出富文本中得文字内容
if(ret.length) {
for(var i=0;i<ret.length;i++) {
var result = ret[i].centent.match(reg);
if(result){
ret[i].imgUrl = [];
for (j = 0; j < result.length; j++){
result[j].replace( /src=(\"|\')?([^\"\>]*)(\"|\')?( |>|\/)/ig, function( $1,$2,$3,$4 ){
result[j] = $3;
});
}
ret[i].imgUrl = result;
}
}
vm.news_list = ret;
vm.offset += 10;
}

递归解决for循环中处理数组的问题

问题描述:
今天写项目的时候,遇到一个问题,简单来说吧,我需要把一个数组中的每个元素都转化一下,
得到一个新的数组,转化是通过一个异步的方法来实现的(必须通过这种方法),于是第一个就
想到了

1
2
3
4
5
6
7
8
9
10
11
12
var arr = [];
for(var i=0; i<data.length;i++){
UIAlbumBrowser.transPath({
path: data[i].path
}, function(ret, err) {
if (ret) {
arr.push(ret.path);
}
});

}
return arr;

但是上面这段代码得到的arr你会发现是[],我理解可能这个UIAlbumBrowser…的方法是个异步的函数
所以根本得不到新的arr。我请教了同事,同事给我支了一招,确确实实解决了这个问题,在这里我是要感谢下他的。
我们使用了递归。简单说就是自己调自己。如果我这次没能知道这个办法,那么下次我绝对不会熟练地
敲出来。这就是我奉行的原则。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
vm.curs(i);
.
.
curs: function(i,list){
var UIAlbumBrowser = api.require('UIAlbumBrowser');
UIAlbumBrowser.transPath({
path: list[i].path
}, function(ret, err) {
if (ret) {
vm.imgArr.push(ret.path);
if(i == vm.imgLength - 1) {
vm.submitImg(vm.imgArr);
}
vm.curs(i+1,list);

}
});
},

这样就得到了一个新的arr了,有个地方不明白,为什么 vm.curs(i+1,list);后面的代码只执行一次呢?

闭包处理异步

1
2
3
4
5
6
var p = [];
for (var i = 0; i < 5.length; i++) {
p[i] = (function(num){
return num;
})(i);
}

纯数组变成json字符串

1
2
3
4
5
6
7
var dynamicImg = [];
for(var a = 0; a<imgList.length; a++){
var info = {};
info.src = imgList[a];
dynamicImg.push(info);
}
console.log(dynamicImg);

ajax传递数组参数的注意事项,这个问题耽误了我很多的时间,也得不出答案,真的是很烦很烦。

1
2

traditional:true

我从这个地方学习到的->