我正在控制台上运行此代码段。在IE中,它产生的输出与预期的一样。在Cr和FF中运行相同的内容以供引用,可以确认行为的一致性。
["a", "b"].forEach(function(element) {
console.log(element);
});
但是,在运行以下脚本时,出现错误告诉我该对象尚未声明forEach(...)。该问题出现在IE中,但不出现在Cr和FF中。
var menus = document.querySelectorAll("ul.application>li>a");
menus.forEach(function(element) { ... }
我检查了是否声明了变量菜单,并且选择它的元素会产生我所期望的,即menus [0]存在并且是一个标记。与其他浏览器相比,它在IE中看起来有些不同,但可能只是不同的形式。
我很幸运与Cr和FF合作,所以我在处理IE方面的经验有限。谷歌搜索并没有给我太多智慧,也没有。
如何进一步排除故障?
最佳答案
基本上,document.querySelectorAll
将返回nodeList
像对象这样的数组而不是数组。您必须先将其转换为数组,然后才能调用该数组的函数。
var menus = document.querySelectorAll("ul.application>li>a");
menus = [].slice.call(menus);
menus.forEach(function(element) { ... });
如果您的环境支持ES6,则可以使用
Array.from()
var menus = document.querySelectorAll("ul.application>li>a");
menus = Array.from(menus);
menus.forEach(function(element) { ... });