Guedda
@Guedda
Начинающий front-end разработчик

Как вытащить из строки с html-тегами некоторые данные из атрибутов?

Входные данные, строка вида:

Здравствуйте, <span class="a612353adjddv__AS" data-target="id_customer">продавец</span>! Мы хотим с Вами заключить <span class="bbasfaAFADFAFV_SD" data-target="id_option">договор</span>. Как Вы на это смотрите,  <span id="some_id" class="a612353adjddv__AS" data-target="id_customer">продавец</span>?

На выходе должно получиться:

Здравствуйте, %id_customer%! Мы хотим с Вами заключить %id_option%. Как Вы на это смотрите, %id_customer%?

Т.е., необходимо как-то вычленить data-target-ы из строки и удалить теги. Эти data-targets конечны и известны. Но вся загвоздка у меня заключается в том, что классы у span всегда разные, и внутри тегов может быть масса и других атрибутов, и простыми replace я не смогу обойтись.
Какое есть универсальное решение?
  • Вопрос задан
  • 207 просмотров
Решения вопроса 2
petushok55
@petushok55
Обучаюсь на практике.
$(document).ready(function() { //jquery
      let value = $('.a612353adjddv__AS[data-target]') // берёшь значение data-target из класса
      $('.a612353adjddv__AS').html(value); // подставляешь его 
      $('.a612353adjddv__AS').removeAttribute('data-target'); // удаляешь атрибут
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
fallus
@fallus
Я не эксперт в регулярках, но по крайне мере задача так решиться может:

const x  = 'Здравствуйте, <span class="a612353adjddv__AS" data-target="id_customer">продавец</span>! Мы хотим с Вами заключить <span class="bbasfaAFADFAFV_SD" data-target="id_option">договор</span>. Как Вы на это смотрите,  <span id="some_id" class="a612353adjddv__AS" data-target="id_customer">продавец</span>'

let dataTargetValues = []

x.replace(/data-target=([\\"\\'])(.*?)\1/g, current => dataTargetValues.push(current.replace(/data-target=/, '').replace(/["']/g, '')))

console.log(dataTargetValues)


И дубликаты удалить, если надо:

dataTargetValues = Array.from(new Set(dataTargetValues))
Ответ написан
Ваш ответ на вопрос

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

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