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

Как задать элементам ID с условием первого не повторяющегося далее символа?

Имеются несколько заголовков, у которых первые символы - числа. Числа могут повторяться несколько раз в качестве первых символов в каждом новом заголовке. Как сделать, чтобы ID задавался только тем заголовкам, у которых число 1, 2, 3 и.т.д встречается впервые? Например, чтобы из:

<h2>1 сезон, 1 серия</h2>
<h2>1 сезон, 2 серия</h2>
<h2>2 сезон, 1 серия</h2>
<h2>2 сезон, 2 серия</h2>


Получалось:
<h2 id="sezon-1">1 сезон, 1 серия</h2>
<h2>1 сезон, 2 серия</h2>
<h2 id="sezon-2">2 сезон, 1 серия</h2>
<h2>2 сезон, 2 серия</h2>
  • Вопрос задан
  • 148 просмотров
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Академия Эдюсон
    Fullstack-разработчик на JavaScript + ИИ
    11 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Инженер по тестированию + ИИ
    6 месяцев
    Далее
Решения вопроса 2
Tim-A-2020
@Tim-A-2020
Ответ написан
Комментировать
0xD34F
@0xD34F Куратор тега JavaScript
О каких элементах идёт речь, с чего должны начинаться id:

const elements = document.querySelectorAll('h2');
const idPrefix = 'season-';

Назначаем id:

for (const n of elements) {
  const [ season, , episode ] = n.textContent.split(' ');
  if (episode === '1') {
    n.id = idPrefix + season;
  }
}

или

for (let i = 0; i < elements.length; i++) {
  const prev = parseInt(elements[~-i]?.innerText);
  const curr = parseInt(elements[i].innerText);
  (curr !== prev) && elements[i].setAttribute('id', `${idPrefix}${curr}`);
}

или

elements.forEach(function(n) {
  const season = +/\d+/.exec(n.innerHTML);
  if (!this.has(season) && this.add(season)) {
    const id = document.createAttribute('id');
    id.value = idPrefix.concat(season);
    n.attributes.setNamedItem(id);
  }
}, new Set);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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