Как получить динамически появившееся содержимое тега?

Рейтинг: 0Ответов: 1Опубликовано: 27.04.2023

Мне нужно взять в переменную текст, который появляется в теге лишь через несколько сек. с момента клика на кнопку (сам тег существует изначально).

Я пробовала сделать это с setTimeout:

submitBtns.forEach(function(item) {
  item.addEventListener('click', function() {
      
      setTimeout(function() {
          const successText = document.querySelector('.wpcf7-response-output').textContent;
          console.log(successText);
      }, 5000);
      
  });   
});

Но проблема в том, что в консоль выводится просто пустая строчка. Тег изначально пустой, так что, видимо, берется его изначальное содержание, а не то, что появилось после клика. setTimeout просто отодвигает момент. Так как получить появившийся текст?

Искала инфу про MutationObserver, но не поняла, как его здесь использовать, так что распишите, пожалуйста :(

Ответы

▲ 0Принят

Как получить динамически появившееся содержимое тега?

Как вариант, использовать слежение за изменением DOM. В моем примере текст будет возвращен "по запросу" как только он (текст) появится:

const os = document.querySelector('p span')
setTimeout(_ => {
  os.textContent = 'вот и текст'
}, 5000)

document.querySelector('button').addEventListener('click', _ => {
  text()
    .then(txt => console.log('Текст получен', txt))
    .catch(console.log)
})
//
function text() {
  return new Promise((resolve, reject) => {
    const v = os.textContent
    if (v) return resolve(v)
    const observer = new MutationObserver(mutation => {
      //console.log(mutation)
      const v = mutation[0].addedNodes[0].wholeText
      resolve(v)
      observer.disconnect()
    })
    const config = {childList: true}
    observer.observe(os, config)
  })
}
<p>Тут будет текст через 5сек <span></span></p>
<button>Получить текст</button>