zoukankan      html  css  js  c++  java
  • 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 = ' 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 
         }
     
     
     
     
  • 相关阅读:
    [HAOI2015]按位或——Min-Max容斥+FWT
    HDU 4773 Problem of Apollonius——圆反演
    类欧几里得小结
    线性规划(单纯形法)知识整理
    奇怪的数学题(51nod1847)——min_25筛+杜教筛+第二类斯特林数
    CSP-S 2019 游记
    2019.11.11~2019.11.12考试总结
    2019.11.6~2019.11.7考试总结
    1019.11.1~2019.11.2考试总结
    Final-阶段站立会议4
  • 原文地址:https://www.cnblogs.com/hihao/p/7344514.html
Copyright © 2011-2022 走看看