(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);
}
-
document .write是直接将内容写入页面的内容流,但是文档流执行完毕,则它会导致页面全部重绘
-
innerHTML 是将内容写入某个DOM节点,不会导致页面全部重绘
-
innerHTML 创建多元素效率更縞(不要拼接字符串,采取数组形式拼接) , 结构稍微复杂
-
createElement ()创建多个元素效率稍低一点,但是结构更清晰
总结:不同浏览器下, innerHTM效率要比creatElement 高。