Inte rnet проводник совместимость? Javascript для каждой функции - PullRequest
0 голосов
/ 13 февраля 2020

const items = document.querySelectorAll(".accordion a");
 
function toggleAccordion(){
  this.classList.toggle('active');
  this.nextElementSibling.classList.toggle('active');
}
 
items.forEach(item => item.addEventListener('click', toggleAccordion));

это код javaScript, который у меня есть для открытия аккордеонов на вкладке вопросов и ответов. Inte rnet explorer входит в мою консольную ошибку, когда я использую это, но современные браузеры этого не делают (edge, chrome, firefox). Как я могу решить эту проблему? Для проекта требуется совместимость проводника inte rnet.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2020

IE не поддерживает функции стрелок и forEach в NodeList. Возвращаемое значение querySelectorAll представляет собой NodeList.

Мы можем перенести синтаксис es6, например, функции стрелок, в es5, используя Babel и polyfill forEach, чтобы сделать его совместимым с 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     
                    });     
                }     
            }     
        } 

es6 до es5:

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);
});
0 голосов
/ 13 февраля 2020

Ошибка: {"message": "Синтаксическая ошибка", "имя файла": "https://stacksnippets.net/js", "lineno": 19, "colno": 21}

Функции жирной стрелки не поддерживаются ни в одной версии IE.

. Вместо этого используйте функции ES5 classi c.

items.forEach(function(item) { item.addEventListener('click', toggleAccordion) });
...