zoukankan      html  css  js  c++  java
  • -_-#【减少 DOM 访问】“离线”更新节点,再将它们添加到树中

    Minimize DOM Access

    javascript 之 DOM 优化

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <ul id="mylist1"></ul>
        <ul id="mylist2"></ul>
        <ul id="mylist3"></ul>
        <script>
            var data = [
                {
                    'name': 'a',
                    'url': 'http://www.a.com/'
                },
                {
                    'name': 'b',
                    'url': 'http://www.b.com/'
                }
            ]
            function appendDataToElement(appendToElement, data) {
                var a
                var li
                var i = 0
                var max = data.length
                for (; i < max; i++) {
                    a = document.createElement('a')
                    a.href = data[i].url
                    a.appendChild(document.createTextNode(data[i].name))
                    li = document.createElement('li')
                    li.appendChild(a)
                    appendToElement.appendChild(li)
                }
            }
    
            // 离线操作DOM树:对DOM树结构进行较大的改变时,需要先将元素脱离文档流,然后进行改变操作,最后再放回到文档流中
            // 减少重排的一个方法是通过改变 display 属性,临时从文档上移除 <ul> 元素然后再恢复它
            var ul1 = document.getElementById('mylist1')
            ul1.style.display = 'none'
            appendDataToElement(ul1, data)
            ul1.style.display = 'block'
    
            // 在文档之外创建并更新一个文档片断,然后将它附加在原始列表上
            var fragment = document.createDocumentFragment()
            appendDataToElement(fragment, data) // 循环添加,多次操作。拼接字符串一次性添加不是一样吗。
            document.getElementById('mylist2').appendChild(fragment)
    
            // 创建要更新节点的副本,然后在副本上操作,最后用新节点覆盖老节点
            var old = document.getElementById('mylist3')
            var clone = old.cloneNode(true)
            appendDataToElement(clone, data)
            old.parentNode.replaceChild(clone, old)
        </script>
    </body>
    </html>
  • 相关阅读:
    Win7旗舰版中的IIS配置asp.net的运行环境
    jquery $(document).ready() 与window.onload的区别
    DEFAULT CURRENT_TIMESTAMP
    存储过程 跳出
    rabbitMQ 重试
    oracle update left join 写法
    error: snap "eclipse" has "install-snap" change in progress
    数据库去空格 去table 去回车符号 去重
    分组 拼接字段
    msyql 去重
  • 原文地址:https://www.cnblogs.com/jzm17173/p/3356787.html
Copyright © 2011-2022 走看看