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

Как получить названия всех форм на странице в виде массива?

На странице есть формы с css-классами, названия которых соответствуют регулярному выражению js-[a-z-]*-form.

Например:

js-signup-form
js-create-product-form

Мне нужно создать функцию, которая, при загрузке страницы, будет возвращать массив названий этих форм, т.е. извлечет строку между "js-" и "-form": ['signup', 'create-product'].

Как это лучше реализовать? Смотреть в сторону работы с HTML-коллекцией?

Array.from(document.getElementsByTagName('p')).map((item) => item.innerHTML.replace('...', '...'))

Если да, то как лучше удалить все лишние данные из кода для каждой формы?
  • Вопрос задан
  • 95 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const result = Array.prototype.flatMap.call(
  document.forms,
  function(form) {
    return form.className.match(this) ?? [];
  },
  /(?<=(^| )js-)[a-z-]*(?=-form( |$))/g
);

или

const result = [];
const reg = /^js-([a-z-]*)-form$/;

for (const form of document.querySelectorAll('form')) {
  for (const cls of form.classList) {
    const name = reg.exec(cls)?.[1];
    if (name != null) {
      result.push(name);
    }
  }
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
18 дек. 2024, в 13:47
1800 руб./в час
18 дек. 2024, в 13:22
30000 руб./за проект
18 дек. 2024, в 12:37
10000 руб./за проект