Код ES6 map() не работает в IE 11

136
16 октября 2019, 18:50

Обнаружил, что код ES6 map() и `` не работают в IE 11 Как это участок кода переписать кроссбраузерно или какой использовать можно polyfill для этого?

jQuery.noConflict(); 
jQuery(document).ready(function($) { 
 
  const keys = ["hard", "soft"]; 
 
  document.head.appendChild((style => { 
    style.textContent = keys.map(key => ` 
			#main-slider-wrapper .slider-key button[data-key="${key}"] { 
				background-image: 
					url(img/${key}-key-slider.png) 
			} 
 
			#main-slider-wrapper[data-key="${key}"] .slider img[src*="${key}-key"] { 
				opacity: 1; 
			} 
 
			#main-slider-wrapper[data-key="${key}"] .slider-key button[data-key="${key}"] { 
				filter: drop-shadow(0 0 0.5em #009af7) drop-shadow(0 0 0.2em rgba(255,255,255,0.5)); 
				-webkit-filter: drop-shadow(0 0 0.5em #009af7) drop-shadow(0 0 0.2em rgba(255,255,255,0.5)); 
			} 
		`).join("\n\n"); 
    return style; 
  })(document.createElement("style"))); 
 
  document.addEventListener("click", ({ 
    target 
  }) => { 
    if (!target.matches( 
        `${keys.map(k => `[data-key="${k}"]`).join(", ")}, .slick-arrow` 
      )) return; 
 
    const root = target.closest("#main-slider-wrapper"); 
    const key = target.dataset.key; 
    const index = keys.indexOf(key); 
    root.dataset.key = key; 
 
    for (const arrow of root.querySelectorAll(".slick-arrow")) { 
      arrow.dataset.key = keys[ 
        (keys.length + ( 
          arrow.classList.contains("left") ? -1 : 1 
        ) + index) % keys.length 
      ]; 
    } 
  }); 
 
  for (const e of document.querySelectorAll(`[data-key="${keys[0]}"]`)) 
    e.click(); 
});

Answer 1

В IE11 не работают шаблонные строки, поэтому их использование нужно заменить обычным сложением, например:

`[data-key="${k}"]`

преобразуется в

'[data-key="'+k+'"]'
Answer 2

По итогу для того, чтобы решить задачу, вначале воспользовался онлайн сервисом, затем добавил babel polyfill, т.к. без него показывало ошибку:

"Символ" не определен в IE после использования babel

И наконец, добавил еще 2 полифила: для matches и closest и вот тогда все заработало!

READ ALSO
slick slider мобильная версия

slick slider мобильная версия

как сделать, чтобы при разрешении 480 в main-slider добавить arrows? если делаю так то все зависает и не подгружает фото

111
Обрезка строки SQL от символа до символа

Обрезка строки SQL от символа до символа

Нужно чтобы запрос обрезал строки в столбце Есть столбец comments в котором данные с разным кол-вом символов но есть повторяющиеся точка с запитой...

122
Could not find API definition for name “JDO”

Could not find API definition for name “JDO”

При запуске из IDE (IntelliJ Idea) все работает, но после компиляции и упаковки в jar получаю ошибку Could not find API definition for name "JDO"Использую maven с shade плагином

117
Сколько раз надо указывать шрифт в css

Сколько раз надо указывать шрифт в css

Я хочу использовать разные шрифты на сайтеДля параграфов один, для заголовков другой

124