JavaScript基础学习--04for循环
一、自动生成100个Li思路:
1、html布局,在button中做点击事件
2、获取将要放置li的container容器,定义li,并拼接成字符串str,同时用数组形式保存四种颜色。
3、将拼接成的字符串渲染到HTML页面中
4、获取页面中所有的li标签,用for循环遍历li标签以操作每个li标签
5、对每个li标签设置top和left
5.1 其中定义变量left=0,并随着for循环中变量j的变化而left++。当超过十个li标签left改变时(left >= 10 ),让left从零开始(left=0)
5.2 同理top值,当left从零开始时(left=0),top++
6、完成基本布局设置之后,定义颜色变化,同5.1,当颜色超过总颜色数量时,从头开始设置颜色
二、for循环的性能问题
1、arr.length 影响性能,每执行一次即计算一次arr.length
for(var i = 0; i < arr.length; i++){......}
解决办法:
var len = arr.length;
for(var i = 0; i < len; i++){......}
2、for循环内部最好不好对页面进行操作(增删改)--》字符串累加之后,在for循环外部进行对HTML内容的增删改 <影响性能的关键!!!>
1 var str = ''; 2 var len = arr.length; 3 for(var i = 0; i < len; i++){ 4 str += '<div>......</div>'; 5 } 6 document.getElementBuId('id').innerHTML = str;
三、样式属性操作
1、object.style.xxx = 'xxx'; eg. oDiv.style.top = num + 'px'; //注意单位!!!!!,注意引号,注意这个样式修改相当于行内(只能获取行内样式,不能获取行间|嵌入样式)!并非外联或者其他地方的修改!
因为这是操作HTML中的属性,类似于type等等,属性名是style
2、object.style.cssText = 'width: 100px; height: 100px;'; //没有兼容性问题,但是这个也是修改(其实是替换)行内样式(只能获取行内样式,不能获取行间|嵌入样式 ),和外联样式无关(不会改变外联样式,只是当行内和外联有同名样式时,行内优先)
四、HTML的innerHTML的‘添加’内容(模仿添加):
oDIV.innerHTML += '<li></li>';
五、按钮只能点击一次
1、按钮身上操作(用户体验不好,不建议!!!)
1.1 让按钮禁用:点击事件内部第一行添加 oBtn.disabled = true; //this.disabled = true;
1.2 让按钮消失:点击事件内部第一行添加 oBtn.style.display = 'none'; //this.style.display = 'none';
1.3 让按钮的点击事件清空:oBtn.onclick = null; // this.onclick = null
2、在内容上操作(性能差,不建议!但是很多时候需要这种思路)
2.1 先清空,再生成:点击事件内部第一行添加 oUI.innerHTML = '';
3、用判断,根据判断执行操作
3.1 给点击事件的按钮添加class flag(操作末尾),然后在第一行判断是否存在这个class,不存在则执行相关操作,否则不操作
3.2 用onOff = true;判断 推荐!!!
1 var onOff = true; 2 oBtn.onclick = function(){ 3 if(onOff){ 4 ...... 5 onOff = false; 6 } 7 }
六、this的指向和应用 注:记忆,出现 fn(); --> 此时fn内部的this指向window
1、this指的是 当前 方法(函数)的那个对象
2、指向window
function fn(){ this } fn();
特殊:此时fn中的 this 不是指向oDiv 而是 window
function fn(){ this } oDiv.onclick = function(){ fn(); }
3、指向其他对象(oDiv)
function fn(){ this } oDiv.onclick = fn; oDiv.onclick = function(){ this }
4、同理,onclick中直接this是指向input本身(因为是input调用的),但是如果是input调用fn,this是fn内部的this,此时fn中的this指向window
<input type="button" value="按钮" onclick="this; fn();" /> //不建议行内的写法
5、this作为参数,此时的指向看this是从何处传出,谁的this,即指向谁,例如:
function fn(obj) { obj --> window } fn(this); ============================================================================== oDiv.onclick = function(){ var $this = this; fn($this); } function fn(obj){ obj --> oDiv }
七、带括号的是执行后的结果进行赋值,不带括号的是赋值函数(是函数)
oDiv.onclick = fn; //这是赋值函数 oDiv.onclick = fn(); //不允许这种写法!!会报错 oDiv.onclick = function(){ fn(); //这是执行完fn函数 var str = fn(); //这是执行完后得出fn的结果并赋值给str }
原创博客,欢迎讨论,转载请注明出处、链接