关于forEach遍历DOM

好久都木有写博客了,前面一堆坑在等着填,自己也有项目需要等着去完成,然而依旧每天都在浪,对自己表示无语。
这次记录的是在JS中forEach遍历DOM节点遇到的问题。
先写一个简单的网页;

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div>test1</div>
		<div>test2</div>
		<div>test3</div>
	</body>
	<script>
		var divList = document.querySelectorAll('div');
		divList.forEach(function(ele){
			alert(ele.innerHTML);
		});
	</script>
</html>

我们希望的结果是弹出三个警告框,但是这段代码在Chrome上没问题、IOS的Safiri上也没问题、安卓部分浏览器上也没问题,但是在IE中、在微信网页中将会全部出现问题。这个问题不太大,但是由于部分浏览器有、部分浏览器没有,很容易忽略。当然,目前很多都是直接用框架这个问题就不可能出现,但是一些简单的页面,直接用JS撸他不香么?
出现问题的原因是什么?按道理来讲forEach是JS中Array的方法,但是使用querySelectorAll返回的类型是NodeList,可以试着打印上面divList对象就可以看到,所以NodeList没有forEach对象,调用当然会出错了,Chorme、Safiri浏览器只不过帮了一把,但是帮是情分,不帮是本分,为了让所有的浏览器都正常运行,需要修改一下。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<div>test1</div>
		<div>test2</div>
		<div>test3</div>
	</body>
	<script>
		var divList = document.querySelectorAll('div');
		// 这里是NodeList
		console.log(divList);
		// 增加语句 将divList从NodeList转为Array
		divList = [].slice.call(divList);
		// 这里是Array
		console.log(divList);
		divList.forEach(function(ele){
			alert(ele.innerHTML);
		});
	</script>
</html>

这样就可以在所有的现代浏览器上面执行了,下次有空再写一写为什么有时候在Safari中会new Date()错误,原因其实和这个很像,就是有的浏览器支持有的不支持而已!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在JavaScript中,可以使用forEach方法来遍历list集合。但是需要注意的是,forEach方法的参数顺序和map方法是相反的,并且forEach方法没有返回值。\[1\]如果你想要遍历DOM元素,通常会使用$(selector).each(function(index, element))函数。\[2\]如果你想要遍历数据,通常会使用$.each(dataresource, function(index, element))函数。\[2\]另外,在ES6中引入了for...of循环,可以用来遍历可迭代的对象,包括数组、字符串、映射、集合等。\[3\]使用for...of循环的语法是for(variable of iterable) { statement },其中variable是每个迭代的属性值被分配给的变量,iterable是一个具有可枚举属性并且可以迭代的对象。\[3\]但是需要注意的是,for...of循环不适用于普通的对象。 #### 引用[.reference_title] - *1* [js遍历list](https://blog.csdn.net/cuisidong1997/article/details/129409603)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [前端代码|循环遍历数组函数: js forEach()、map() 、for...of || jQuery each() 定义、语法、示例详解](https://blog.csdn.net/qq_32392597/article/details/110918866)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值