Проблема с DOM MutationObserver - JavaScript - PullRequest
0 голосов
/ 23 октября 2018

https://www.skycandyaustin.com/class/open-studio/

Здесь вы можете увидеть кнопку списка ожидания в четверг, 25 октября. Требуется, если класс заполнен, затем вместо кнопки вывести «Список ожидания», и я сделал это.Ниже приведен код для того же самого.

$("div.bw-session:has(span.hc_waitlist)").each(function () {
               $(this).find(".bw-widget__signup-now").hide();
               $("span.bw-widget__cart_button", this).append("<a class=\"hc-button signup_now bw-widget__signup-now bw-widget__cta\" href=\"mailto:"
                   + scConfig.waitlistEmail + "?subject=Waitlist for "
                   + $('div.bw-session__name', this).text().replace(reWhitespace, ' ')
                   + '&body=Hello%2c  %0D%0A %0D%0A Please add me to the Waitlist for '
                   + $('div.bw-session__name', this).text().replace(reWhitespace, ' ')
                   + " on " + $(this).parent().children('.bw-widget__date').text().replace(/,/g, "")
                   + " with " + $("div.bw-session__staff", this).text()
                   + ".\">Waitlist</a>");
 });

Затем я использовал DOM MutationObserver, но проблема, с которой я сталкиваюсь сейчас, заключается в том, что если вы проверяете элемент inspect, вы можете видеть, что класс привязки добавляется каждую 1 секунду.Вот код для того же.Мне просто нужно добавить элемент один раз.Не могли бы вы помочь мне решить проблему?

// Observer way to listen for changes
// Create an observer instance

var observer = new MutationObserver(function (mutations) {
    if (mutatingWidget === false) {
        if (mutationTimer > 0) {
            window.clearTimeout(mutationTimer);
        }
        mutationTimer = window.setTimeout(postWidgetLoad, 1000);
    }
});

// Configuration of the observer:
   var config = { attributes: true, childList: true, subtree: true };

// Pass in the target node, as well as the observer options
$("healcode-widget").each(function () {
    console.debug("Observing changes on " + this.tagName);
    observer.observe(this, config);
});

1 Ответ

0 голосов
/ 27 октября 2018

Нашел решение после часов исследования кода.Я дал проверку, где postWidgetLoad вызывает с использованием setTimeout.

Вот логика применяется.

Так как я добавляю новую кнопку класса hc для секции waitlist, проверил, существует ли класс или нет,Если нет, то вызовите функцию postWidgetLoad, иначе цикл перестанет выполняться, поскольку класс уже создан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...