Как мне написать эти циклы в ES6 vanilla javascript? - PullRequest
0 голосов
/ 12 января 2019

Я новичок в ES6, как мне написать этот код в простейшей и краткой форме в ES6 vanilla?

ref8 = b.querySelectorAll("[class*='fileType-']");
for (l1 = 0, len9 = ref8.length; l1 < len9; l1++) {
  x = ref8[l1];
  ref9 = function () {
    var len10, n1, ref9, results;
    ref9 = x.classList;
    results = [];
    for (n1 = 0, len10 = ref9.length; n1 < len10; n1++) {
      k = ref9[n1];
      if (k.startsWith("fileType-")) {
        results.push(k);
      }
    }
    return results;
  }();
  for (m1 = 0, len10 = ref9.length; m1 < len10; m1++) {
    k = ref9[m1];
    x.classList.remove(k);
  }
}

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Вы можете перебрать список элементов, используя NodeList.forEach(). Получить список классов, преобразовать его в массив, используя Array.from(), отфильтровав его по элементам, которые начинаются с fileType-, а затем удалив их из classList:

document.querySelectorAll("[class*='fileType-']")
  .forEach(el => {
    Array.from(el.classList)
      .filter(cls => cls.startsWith('fileType-'))
      .forEach(cls => el.classList.remove(cls));
  });
.fileType-x {
  color: red;
}

.fileType-y {
  color: blue;
}

.fileType-z {
  color: purple;
}

.fileType-z2 {
  background: gold;
}
<div class="fileType-x">X</div>
<div class="someother class fileType-y">Y</div>
<div class="fileType-z fileType-z2">Z</div>
<div class="dummy">dummy</div>
0 голосов
/ 12 января 2019

Предполагая, что есть только один класс, содержащий fileType, вы можете сопоставить его с регулярным выражением, перебирая элементы с forEach, а затем удалить сопоставленное имя класса из classList элемента:

b.querySelectorAll("[class*='fileType-']")
  .forEach((element) => {
    const { className } = element;
    const fileTypeClass = className.match(/(?:^| )(fileType-\S+)/)[1];
    element.classList.remove(fileTypeClass);
  });

Обратите внимание, что здесь используется NodeList.prototype.forEach, которого нет в старых браузерах - если вы хотите, чтобы это работало в старых браузерах, вместо этого .call Array.prototype.forEach:

Array.prototype.forEach.call(
  b.querySelectorAll("[class^='fileType-']"),
  (element) => {
    const { className } = element;
    const fileTypeClass = className.match(/(?:^| )(fileType-\S+)/)[1];
    element.classList.remove(fileTypeClass);
  }
);

(или включить полифил для NodeList.prototype.forEach)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...