DOM三种动态创建元素区别

13 篇文章 1 订阅

DOM三种动态创建元素区别

看网上视频学习了 DOM三种动态创建元素区别:
1.document.write()
2.element.innerHTML
3.document.createElement()

提前总结:
1、document.write() 是直接将内容写入页面的内容流,但是文档流执行完毕,则会导致页面全部重绘
2、innerHTML 是将内容写入某个DOM节点,不会导致页面全部重绘
3.innerHTML 创建多个元素效率更高(不要拼接字符串,采用数组形式拼接),结构稍微复杂
4、document.createElement()创建多个元素效率稍微低一点点,但是结构更加清晰
5、不同浏览器下 innerHTML 效率要比createElement 高
6、最后补充一点就是:我查阅MDN文档时发现 当插入纯文本时innerHTML 存在一个安全问题。具体见MDN innerHTML的用法,这个在使用时应该要注意一下

一、.document.write()的使用

<body>
    <button>点击</button>
    <p>abc</p>
    <!-- <div class="inner"></div>
    <div class="create"></div> -->
    <script>
        // 三种创建元素方式的区别
        //1.document.write() 创建元素  如果页面文档加载完毕,再调用这句话会导致页面重绘
        var btn = document.querySelector('button');
        btn.onclick = function() {
            document.write('<div>123</div>');
        }
    </script>
</body>

在这里插入图片描述
当点击按钮调用document.write()后,由于页面文档已经加载完毕,导致页面重绘
在这里插入图片描述

二、element.innerHTML的使用:
主要测试创建多个元素时的效率

<script>
    function fn() {
        var d1 = +new Date();
        var str = '';
        for (var i = 0; i < 1000; i++) {
            document.body.innerHTML += '<div style = "width:100px; height:2px; border:1px solid blue;"></div>'
        }
        var d2 = +new Date();
        console.log(d2 - d1);
    }
    fn();
</script>

可以看到 使用innerHTML 创建1000个元素 共使用了 900多毫秒
在这里插入图片描述
三、document.createElement()的使用:
使用document.createElement() 创建多个元素测试效率

<script>
    function fn() {
        var d1 = +new Date();
        for (var i = 0; i < 1000; i++) {
            var div = document.createElement('div');
            div.style.width = '100px';
            div.style.height = '2px';
            div.style.border = '1px solid red';
            document.body.appendChild(div);

        }
        var d2 = +new Date();
        console.log(d2 - d1);
    }
    fn();
</script>

当使用 document.createElement() 创建1000个元素仅仅耗时14毫秒

在这里插入图片描述

四、innerHTML 采取数组的形式创建1000个元素:

<script>
    function fn() {
        var d1 = +new Date();
        var array = [];
        for (var i = 0; i < 1000; i++) {
            array.push('<div style="width:100px; height:2px; border:1px solid blue;"></div>');
        }
        document.body.innerHTML = array.join('');
        var d2 = +new Date();
        console.log(d2 - d1);
    }
    fn();
</script>

innerHTML 采取数组的形式创建1000个元素 仅仅耗时 4 毫秒
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值