DOM动态创建元素的方法

DOM创建元素的三种方式

1. HTML DOM write() 方法

document.write('新设置的内容<p>标签也可以生成</p>');

2. innerHTML 属性

var divs = document.getElementById('div');
divs.innerHTML = '新内容 <del>标签也可以生成</del>';

如果使用Element.getElementsByTagName() 方法获取元素引用,则需指定下标,因为它返回的是一个集合。
返回一个集合的方法还有getElementsByTagName() 、getElementsByClassName() 等。
MDN对Element.getElementsByTagName() 方法的部分描述如下所示。

返回一个动态的包含所有指定标签名的元素的HTML集合

var tests = document.getElementsByTagName('p')[0];
tests.innerHTML = '新内容 <del>标签也可以生成</del>';

代码:

<body>
	<p id="test">旧内容</p>

	<script>
		// getElementById获取引用
		// var tests = document.getElementById('test');
		// tests.innerHTML = '新内容 <del>标签也可以生成</del>';
		
		// getElementsByTagName获取引用
		var tests = document.getElementsByTagName('p')[0];
		tests.innerHTML = '新内容 <del>标签也可以生成</del>';
	</script>
</body>

3. XML DOM createElement() 方法

// 创建元素节点
var tests = document.createElement('p');
// 创建文本节点
tests.innerText = '新内容 <del>标签不可以生成</del>';
// 把新元素节点挂到body下
document.body.appendChild(tests);

上述三种方法所耗时间

1.HTML DOM write() 方法

<script>
	function fn() {
		var d1 = +new Date();

		for ( var i = 0; i < 1000; i++) {
			document.write('<div style="width:100px; height:2px; border:1px solid blue;"></div>');
		}

		var d2 = +new Date();
		alert(d2 - d1 + '毫秒');
	}
	fn();
</script>

所耗时间:
在这里插入图片描述

2. innerHTML 属性
未优化代码:

<script>
	function fn() {
		var d1 = +new Date();

		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();
		alert(d2 - d1 + '毫秒');
	}
	fn();
</script>

所耗时间:
在这里插入图片描述

优化后代码:
(新元素存放至数组中,然后一次性渲染到页面上)

<script>
	function fn() {
		var d1 = +new Date();

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

所耗时间:
在这里插入图片描述

3. XML DOM 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 blue';
			document.body.appendChild(div);
		}
		
		var d2 = +new Date();
		alert(d2 - d1 + '毫秒');
	}
	fn();
</script>

所耗时间:
在这里插入图片描述

总结:

XML DOM createElement() 方法虽耗时最久,但因结构清晰、无需拼接字符串、易于维护等特点,生成较复杂的结构时应使用它;如需大量使用innerHTML,应把所生成内容放进数组,然后一次性渲染。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值