JavaScript用Element Traversal新属性遍历子元素

之前遍历子元素可以用childNodes属性或者firstChild进行遍历,但是要判断子元素是否是ELement元素。

后来W3C通过Element Traversal规定定义了一组新的属性来进行遍历,就不用判断了,非常方便。

childNodes属性遍历

遍历子元素通常是通过childNodes属性进行遍历,但是这个属性会包含空白节点,如果只是要遍历Element元素就特别不方便。

请看如下代码示例:

<div class="article">
	<p>段落一</p>
	<p>段落二</p>
	<p>段落三</p>
</div>

<script type="text/javascript">
	let childList = document.querySelector(".article").childNodes;
	console.log(childList);
	// 控制台输出:
	//	NodeList(7) [text, p, text, p, text, p, text]
</script>

控制台查看效果:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kchef7CA-1637380269699)(JavaScript遍历子元素没有空白节点_files/1.png)]

获取到的子元素包含了空白的text节点,这些节点就是一些换行、缩进、空格等。

如果要遍历 childList 中p元素,实务中也经常是这样,那么需要判断子元素为Element类型:

let childList = document.querySelector(".article").childNodes;
// 遍历子元素
childList.forEach((item, index) => {
	if (item.nodeType == 1) { // 判断是Element类型
		console.log(item);
	}
});

// 控制台输出:
//	3个p元素

Element系列属性遍历

Element Traversal为DOM元素添加了5个属性:

1. childElementCount 子元素的个数(nodeType=1)。
2. firstElementChilde 指向第一个Element类型的子元素。
3. lastElementChilde 指向最后一个Element类型的子元素。
4. previousElementSibling 指向上一个同胞Element类型的元素。
5. nextElementSibling 指向下一个同胞Element类型的元素。

通过这些新属性,遍历Element元素起来就方便多了,还是以上面为例:

// 获取第一个元素
let currentElement = document.querySelector(".article").firstElementChild;
// 遍历子元素
while (currentElement) {
	console.log(currentElement);
	// 获取下一个元素
	currentElement = currentElement.nextElementSibling;
}

这样处理起来就更加简洁了。

目前IE9及以上版本,以及所有现代浏览器都支持这些属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晴空闲雲

感谢家人们的投喂

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值