js中创建元素,write、innerHTML、createElement的区别

(1)ducument.write
直接使用ducument.write('<div>123</div>')没有问题,可以直接加载进入页面。
但是如果页面文档流加载完毕,再调用这句话就会导致页面重绘。
什么意思呢?就是以前的所有元素都不要了,全部删除,然后把你需要添加的元素加载进去。
看一下下面的视频就懂了

write()重绘


观察这个视频前后页面元素的区别
点击前的页面代码

<!DOCTYPE html> 
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button>点击</button>
    <p>abc</p>
    <div class="inner"></div>
    <div class="create"></div>
    <script>
    	var btn=document.querySelector('button');
        btn.onclick=function(){
    
    
            document.write('<div>123</div>');
        }
    </script>
</body>
</html>

点击后的页面代码

<html>
	<head></head>
	<body>
		<div>123</div>
	</body>
</html>

比较一下之后,就能直观地看出重绘带来的改变。这个方法并不是很友好,我们也很少使用。
(2)innerHTML
第一种直接采用字符串拼接的方式-------这种方式加载速度较慢,因为字符串的不可变性,导致不断添加加载新的内存,内容多了,很不友好。
字符串拼接的方式加载大概需要800ms左右,电脑性能不一样,可能有差别。

var inner = document.querySelector('.inner');
for(var i=0;i<=100;i++){
    
    
    inner.innerHTML += '<a href="javascript:;">搜索</a>';
}

第二种采用数组拼接的方式,先直接添加到数组中,然后在把数组改变为字符串。-------这种加载速度就很非常快,建议用这种方式。
数组拼接的方式加载大概需要2ms左右,电脑性能不一样,可能有差别。

var inner = document.querySelector('.inner');
var arr=[];
    for(var i=0;i<=100;i++){
    
    
        arr.push('<a href="javascript:;">搜索</a>');
    }
inner.innerHTML = arr.join('');

(3)document.createElement()
这种加载速度也很快,大概需要5ms左右,电脑性能不一样,可能有差别。

var create = document.querySelector('.create');
        for(var i=0;i<=100;i++){
    
    
            var a=document.createElement('a');
            create.appendChild(a);
        }
  1. document .write是直接将内容写入页面的内容流,但是文档流执行完毕,则它会导致页面全部重绘

  2. innerHTML 是将内容写入某个DOM节点,不会导致页面全部重绘

  3. innerHTML 创建多元素效率更縞(不要拼接字符串,采取数组形式拼接) , 结构稍微复杂

  4. createElement ()创建多个元素效率稍低一点,但是结构更清晰

总结:不同浏览器下, innerHTM效率要比creatElement 高。

猜你喜欢

转载自blog.csdn.net/qq_48439911/article/details/123785358