节点操作 3种动态创建元素的区别 write() innerHtml createElement() 执行效率

三种动态创建元素区别

  • document.write();
  • element.innerHtml;
  • document.createElement();

区别:

  1. document.write() 是直接将内容写入页面的内容流,但是文档流执行完毕,则它会导致页面全部重绘;
<body>
	<div>我的内容将会被write()重绘会123</div>
	<script>
		document.write(123);
	</script>
</body>
  1. innerHtml是将内容写入某个DOM节点,不会导致页面全部重绘;
<body>
	<div>我的内容将会被write()重绘会123</div>
	我的内容将会被write()重绘会123
	我的内容将会被write()重绘会123
	<script>
		div.innerHTML='我是通过js的innerHTML生成的内容';
	</script>
</body>
  1. innerHtml 创建多隔元素效率更高(不要拼接字符串,采取数组形式拼接),结构稍微复杂;
    innerHTML拼接字符串的形式效率测试demo
<body>
	<div>我的内容将会被write()重绘会123</div>
	我的内容将会被write()重绘会123
	我的内容将会被write()重绘会123
	<script>
		function fn(){
			var timer1=+new Date();//获取时间戳
			var box=document.getElementsByTagName("div")[0];
			for(var i=0;i<=1000;i++){
				box.innerHTML+='我是通过js的innerHTML生成的内容';
			}
			var timer2=+new Date();
			console.log(timer2-timer1);
		}
		fn();//返回时间差在130左右
	</script>
</body>

innerHTML拼接字符串的形式效率测试demo

<body>
	<div>我的内容将会被write()重绘会123</div>
	我的内容将会被write()重绘会123
	我的内容将会被write()重绘会123
	<script>
		function fn(){
			var timer1=+new Date();//获取时间戳
			var arr=[];
			
			for(var i=0;i<=1000;i++){
				arr.push('<div style="width:100px;height:2px;border:1px solid yellow"></div>');
			}
			document.body.innerHTML=arr.join('');
			
			var timer2=+new Date();
			console.log(timer2-timer1);
		}
		fn();//返回时间差在3毫秒左右
	</script>
</body>
  1. createElement() 创建多个元素效率稍低一点点,但是结构更清晰;
    createElement()效率测试demo
<body>
	<div>我的内容将会被write()重绘会123</div>
	我的内容将会被write()重绘会123
	我的内容将会被write()重绘会123
	<script>
		function fn(){
			var timer1=+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 timer2=+new Date();
			console.log(timer2-timer1);
		}
		fn();//返回时间差在13毫秒左右
	</script>
</body>

总结:不同浏览器下,innerHtml 效率比 createElement 高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值