Задать вопрос
@molokhan

Как скопировать наименования классов всех input элементов в отдельном блоке в массив?

Добрый день!
На странице есть список ol, внутри находятся теги li в которых текст перемешан с полями input. Как собрать классы всех этих input в отдельный массив?
При этом на странице могут находится и другие инпуты, нужны только те, что внутри этого списка.

https://codepen.io/anon/pen/NEmWxr?editors=1100

<ol>
  <li>Текст <input class="some-class" type="text"> текст текст</li>
  <li>Текст текст<input class="some-class" type="text"> текст текст</li>
  <li>Текст<input class="some-class" type="text"> текст текст текст <input class="some-class" type="text">текст</li>
  <li>Текст текст текст текст текст</li>
  <li>Текст текст <input class="some-class" type="text">текст</li>
  <li>Текст<input class="some-class" type="text"> текст <input class="some-class" type="text">текст текст текст</li>
</ol>
  • Вопрос задан
  • 78 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Откуда надо получить классы:

const inputs = document.querySelectorAll('ol input');

Получаем уникализированный массив классов:

const classes = [...new Set(Array.prototype.flatMap.call(
  inputs,
  n => [...n.classList]
))];

Или, получаем всё, что есть:

const classes = Array
  .from(inputs, n => Array.from(n.classList))
  .flat();

// или

const classes = [].concat.apply(
  [],
  [].map.call(inputs, n => n.className.split(' '))
);

// или

const classes = [];
for (const n of inputs) {
  for (const m of n.classList) {
    classes.push(m);
  }
}

// или

const classes = [];
for (let i = 0; i < inputs.length; i++) {
  for (let j = 0; j < inputs[i].classList.length; j++) {
    classes[classes.length] = inputs[i].classList[j];
  }
}

// или

const getClasses = (classList, i, n = classList.item(i)) =>
  n ? [ n, ...getClasses(classList, -~i) ] : [];

const classes = (function get(i, n = inputs.item(i)) {
  return n ? [ ...getClasses(n.classList, 0), ...get(++i) ] : [];
})(0);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы