Конвертировать JQuery Each в цикл ES6/7

Я пытаюсь удалить зависимость jQuery и замена этого.each на цикл оказывается сложно.

// inline <img> when src = .svg so it is styled with CSS 

$('[src$=".svg"]').each(function() { // get .svg 
  var $img = $(this);
  var imgURL = $img.attr("src"); // get src url
  $.get(
    imgURL,
    function(data) { // Get the SVG guts from image file
      var $svg = $(data).find("svg");
      $img.replaceWith($svg);  // Replace img with SVG guts
    }, "xml"
  );
});

1 ответ

Браузеры реализуют селекторы в стиле jQuery и методы сбора. Таким образом, каждый цикл jQuery можно эмулировать в обычном JavaScript, используя document.querySelectorAll вернуть NodeList, который является массивоподобным объектом, который вроде как коллекция jQuery:

const nodeList = document.querySelectorAll('[src$=".svg"]')

Вы можете одолжить forEach метод из массивов:

Array.prototype.forEach.call(nodeList, node => {
  // do something
})

Большинство браузеров (кроме IE) на самом деле поддерживают forEach метод непосредственно на NodeList s:

nodeList.forEach(node => {
  // do something
})

Вы также можете использовать цикл for/while и получить доступ к отдельным элементам, используя синтаксис в квадратных скобках:

for (let i = 0; i < nodeList.length; i++) {
  // current element is nodeList[i]
}
Другие вопросы по тегам