Internet explorer兼容性?每个函数的Javascript
Internet explorer兼容性?每个函数的Javascript,javascript,internet-explorer,Javascript,Internet Explorer,const items=document.queryselectoral(“.accordion a”); 函数toggleAccordion(){ this.classList.toggle('active'); this.nextElementSibling.classList.toggle('active'); } items.forEach(item=>item.addEventListener('click',toggleAccordion)) 错误:{“消息”:“语法错误”,“文件名
const items=document.queryselectoral(“.accordion a”);
函数toggleAccordion(){
this.classList.toggle('active');
this.nextElementSibling.classList.toggle('active');
}
items.forEach(item=>item.addEventListener('click',toggleAccordion))代码>
错误:{“消息”:“语法错误”,“文件名”:
“”,“行号”:19,“行号”:21}
胖箭头函数是
改用ES5经典函数
items.forEach(function(item) { item.addEventListener('click', toggleAccordion) });
IE不支持节点列表上的和forEach
。querySelectorAll
的返回值是一个节点列表
我们可以使用和polyfillforEach
将es6语法(如箭头函数)传输到es5,以使其与IE 11兼容
Polyfill:
var ctors = [typeof NodeList !== "undefined" && NodeList, typeof HTMLCollection !== "undefined" && HTMLCollection];
for (var n = 0; n < ctors.length; ++n) {
var ctor = ctors[n];
if (ctor && ctor.prototype && !ctor.prototype.forEach) {
ctor.prototype.forEach = Array.prototype.forEach;
if (typeof Symbol !== "undefined" && Symbol.iterator && !ctor.prototype[Symbol.iterator]) {
Object.defineProperty(ctor.prototype, Symbol.iterator, {
value: Array.prototype[Symbol.itereator],
writable: true,
configurable: true
});
}
}
}
var items = document.querySelectorAll(".accordion a");
function toggleAccordion() {
this.classList.toggle('active');
this.nextElementSibling.classList.toggle('active');
}
items.forEach(function (item) {
return item.addEventListener('click', toggleAccordion);
});
错误,错误消息是什么?您需要与哪些版本的Internet explorer兼容?(如果您不指定,我们将假设IE11,因为这是唯一仍受支持的版本,但清楚这些事情是有帮助的)IE(甚至IE11)不支持Javascript的ES6语法。这包括const
和forEach
。您需要至少更改代码的这两部分。IE控制台将此错误记录为“SCRIPT1002:Syntax error”,并将其指向forEach函数。同样是IE11。@Spudley IE11识别const
关键字,但将其视为var
(块作用域/常量未“创建”)。尝试了此操作,但internet explorer正在记录错误“第9行错误:对象不支持属性或方法'forEach'”,for(项目的var项)如何
?@hateScala节点列表在IE中不支持forEach
方法。您必须将列表对象转换为数组,或者使用常规的for
循环,而不是forEach
(for..of
也不受支持)。ES5语法表示支持for in。但是当。。在
中,它表示对象不支持事件侦听器。但在其他浏览器中仍然有效