IE中替代forEach改用普通for循环:兼容问题及实现方法问询
替代IE不支持的forEach实现方案
嘿,这个问题我太有发言权了——IE浏览器对ES5+的数组方法支持一直是个坑,forEach就是其中之一。不过别慌,用最基础的for循环就能完美替代原来的功能,兼容性直接拉满。
原代码问题分析
你原来的代码[].forEach.call(document.querySelectorAll('.some-class-selector'), function(arg) { callSomeFucntion(arg) });本质是借助数组的forEach方法,遍历querySelectorAll返回的类数组对象(NodeList)。但IE(尤其是IE9以下)既不支持数组的forEach,也不支持NodeList直接调用forEach,所以必须改用传统循环。
改用for循环的实现代码
直接用标准的for循环遍历NodeList的索引即可,代码逻辑和原功能完全一致:
// 先获取目标元素集合 var elements = document.querySelectorAll('.some-class-selector'); // 遍历每个元素 for (var i = 0; i < elements.length; i++) { // 取出当前元素,调用目标函数 callSomeFucntion(elements[i]); }
额外注意点
- 这里的
elements是querySelectorAll返回的NodeList,在IE8及以上版本中是支持length属性和索引访问的,所以这个写法完全兼容。 - 如果你的项目还要兼容更老的IE(比如IE7),那
querySelectorAll本身也不支持,得换成getElementsByClassName或者其他DOM选择方法,但那就是另一个问题啦。
内容的提问来源于stack exchange,提问作者soum
相关产品推荐
相关产品推荐

