zoukankan      html  css  js  c++  java
  • 如何渲染数据

    渲染数据

      数据渲染:

        字符串拼接    dom创建   模板    文档碎片

      Dom回流:

        每当对dom元素进行增删改的时候,浏览器就会重新加载一个,把新的结果渲染出来;

      案例:ul 下面有三个 li  ,每个 li 有一个onmouseover事件;

      1,字符串拼接(最常用)

        var list = document.querySelector( " . list " )

        var li = document.querySelectorAll( " li " )

        for (var i=0 ; i < li . length ; i ++){

            li [i] . onmousemove = function(){

              this.style.background="red"

            }

            li [i] . onmouseout= function(){

              this.style.background=" "

            }

         }

        var data=[ "aaa" , "bbb" , "ccc" ]

        var st=" "

        for(var m=0; m<data.length; m++){

            st+="<li>"

              st+=data[m]

            st+="</li>

        }

        list.innerHTML + = st ;

        优点:

          只进行了一次DOM回流;

        缺点:

          原有dom事件都会丢失;

        原因:

          就在于innerHTML这个属性,这个属性是返回或设置dom中的内容,以字符串形式返回,拼接完之后是string类型,

          而onmouse这些属性是dom元素身上的,所以这些onmouse系列的属性就丢失了;

      2,DOM拼接:

        var list = document . querySelector(" . list " )

        var li = document . querySelectorAll(" li ")

        for (var i=0 ; i < li . length ; i ++){

            li [i] . onmousemove = function(){

              this.style.background="red"

            }

            li [i] . onmouseout= function(){

              this.style.background=" "

            }

         }

        var data=[ "aaa" , "bbb" , "ccc" ]

        for(var m=0; m < data . length ; m++){

            var lis = document . createElement(“ li ”)

            lis . innerHTML= data[m]

            list . appendchild(lis)

        }

        优点:

          原有的dom身上的事件不会丢失,不影响其他dom

        缺点:

          dom回流次数过多,严重影响网页性能

      3,模板:

          他的本质就是字符串拼接;

      4,文档碎片:

          var list = document . querySelector(" . list " )

          var li = document . querySelectorAll(" li ")

          for (var i=0 ; i < li . length ; i ++){

              li [i] . onmousemove = function(){

                this.style.background="red"

              }

              li [i] . onmouseout= function(){

                this.style.background=" "

              }

           }

            var data=[ "aaa" , "bbb" , "ccc" ]

            var frag = createDocumentFrament()

            for(var m = 0; m < data. length ; m++){

                var lis = document.createElement(“li”)

                lis . innerHTML = data [ m]

                frag.appendchild (lis)

            }

            list.appendchild  (frag)

        *事件委托:

          利用事件冒泡原理

          无论上面四种方法,新增的li没有onmouseover事件,

          如果保证新增的 li 也拥有添加事件,用dom遍历添加事件是不行的,用事件委托;

          

            

  • 相关阅读:
    react生命周期-渲染阶段
    react声明周期详解
    react子传父
    react 爷爷组件件传递给孙子组件
    react验证参数格式类型
    原生input上传视拼,参数形式 file: (binary)形式的
    L2-4 彩虹瓶 (25分)
    L2-3 深入虎穴 (25分)
    L2-1 链表去重 (25分)
    L1-1 帅到没朋友 (20分)
  • 原文地址:https://www.cnblogs.com/xiaotaiyangye/p/10530472.html
Copyright © 2011-2022 走看看