В течение нескольких лет я использовал функцию waitForKeyElements()
для отслеживания изменений в веб-страницах из пользовательского текста. Однако иногда я обнаружил, что он не срабатывает, как ожидалось, и не работал. Я столкнулся с другим примером этой проблемы, и теперь я пытаюсь понять, в чем проблема. Ниже приведен самый яркий пример, который я могу создать.Почему waitForKeyElements() запускается только один раз, несмотря на последующие изменения?
Учитывая простой HTML-страницу, которая выглядит следующим образом:
<span class="e1">blah</span>
и некоторые Javascript:
// function defined here https://gist.github.com/BrockA/2625891
waitForKeyElements('.e1', handle_e1, false);
function handle_e1(node) {
console.log(node.text());
alert(node.text());
}
setInterval(function() {
$('.e1').text("updated: "+Math.random());
}, 5000);
Я бы ожидать, этот код, чтобы вызвать alert()
и console.log()
каждые 5 секунд. Однако он срабатывает только один раз. Есть идеи?
Адрес a codepen that demonstrates this.
спасибо. Так что было бы правильно сказать, что без того, что вы описали выше, waitForKeyElements() предназначен для обнаружения объектов, динамически добавленных * на страницу, в отличие от (также) отслеживания при изменении объекта * на странице? – mix
Первоначально это означало больше для добавленных элементов, да. Но он может делать оба, как показано. Я упомянул только MutationObserver, так как множество сравнений строк может теоретически замедлить страницу, если вы делаете достаточно (вероятно, несколько тысяч элементов под проверкой). На практике это было только проблемой для меня однажды из многих сотен приложений. MutationObserver теперь довольно стабилен (не существовал, когда родился WFKE) и может быть более элегантным для отслеживания изменений. –