前端经验
jq 无法获得字符串拼接的id
for(var i=1;i<=3;i++) { $("#a"+i).html("我是"+i); // 红色部分是不识别的。 }
大家注意这个写法 "#a"+i (简单的拼接字符串),这个写法jq是不识别的,会返回null值,但是getElementById() 识别这个写法。
但是此处我不想用getElementById()这个方法,想用jq的方法写。
解决方案如下:
用eval()函数,
此处我们可以这么写 $(eval("a"+i)).html("我是"+i); ,jq就识别了,知道你要找的是id等于a1的对象了。
切忌,不要加 # 号 。
加的话作用就消失了,还是会返回null值的。
setTimeout 出现闭包问题
setTimeout这个方法是window对象的方法,用于在指定的毫秒数后调用函数或计算表达式。
window对象,window对象,window对象!!!
解决办法两种,第一种使用闭包 for (var i = 1; i <= 5; i++) { (function(j) { setTimeout(function timer() { console.log(j); }, j * 1000); })(i); } 第二种就是使用 setTimeout 的第三个参数 for ( var i=1; i<=5; i++) { setTimeout( function timer(j) { console.log( j ); }, i*1000, i); } 第三种就是使用 let 定义 i 了 for ( let i=1; i<=5; i++) { setTimeout( function timer() { console.log( i ); }, i*1000 ); }
JS操作文件
- 保存的时候不能直接保存打开的json文件,还需要"下载"这一步
- js不允许直接操作本地数据文件
var content = JSON.stringify(barInfo); var blob = new Blob([content], {type: "text/plain;charset=utf-8"}); saveAs(blob, "myjson1.json");
onClick 跟onplay 混淆了
myVideo.play(); //触发play 导致盗用了下面的onplay