Есть несколько проблем с вашим кодом,
- Во-первых, мы не хотим, чтобы повторно установить интервалы - это вызовет каскад и в конечном счете заморозить нить, которая не является забавой
- Во-вторых, getElementByTagName не является методом на
document
. Вы должны либо индексировать в пункт 0
результата document.getElementsByTagName
или использовать какой-то другой поиск, таких как document.querySelector
Так пример того, как вы могли бы сделать это следующим образом
function waitForText(element, text, callback, freq) {
if (!element || !callback || typeof text !== 'string')
throw new TypeError('Bad value');
var interval = window.setInterval(test, freq || 200);
function test() {
if (!element.parentNode) // node detached, don't hold onto this
window.clearInterval(interval);
if (element.textContent === text) {
window.clearInterval(interval);
callback.call(element);
}
}
}
Тогда
// say you want the first <p> in the DOM tree
var elm = document.querySelector('p');
// attach the condition
waitForText(elm, 'some text',() => console.log('Text appears'));
И в будущем ..
window.setTimeout(() => elm.textContent = 'some text', 6e3);
// wait 6 seconds..
// callback fires
GetElementByTagName возвращает массив – Homberto
@Homberto 'getElementByTagName' является _undefined_;) –
Если бы вы проверили вашу консоль ошибок, вы бы увидели сообщение об ошибке. И «не работает» - это * никогда * достаточно информации при обращении за помощью. –