MutationObserver прослушивает, даже если никогда не вызывался

#javascript #mutation-observers

#javascript #мутация-наблюдатели

Вопрос:

Я программирую внешний скрипт. Мне нужно добавить некоторые элементы в раздел, который очищается каждые 30 секунд. Поэтому я связал MutationObserver , что восстанавливает содержимое после его удаления. Во время тестирования я замечаю, что мой MutationObserver работает, даже если я никогда ему не звоню.

Вот мой код для создания моего элемента:

 function moveFilters(){
   if($("#new-filter-place").length == 0){
       $("<h1 id='new-filter-place'>TEST</h1>").insertAfter($('#category-top10'));
       observeFilters();
   }
}
  

Вот мой наблюдатель:

 function observeFilters(){
    console.log('test');
    var target = document.querySelector("#new-filter-place");
    var observer = new MutationObserver(function(mutations){
        mutations.forEach(function(mutation){
            var nodes = Array.from(mutation.removedNodes);
            var directMatch = nodes.indexOf(target) > -1;
            var parentMatch = nodes.some(parent => parent.contains(target));
            if(directMatch || parentMatch){
                observer.disconnect();
                moveFilters();
        }
    });
})
var config = {
    subtree: true,
    childList: true
};
    observer.observe(document.body, config);
}
  

Я никогда не вызывал функцию moveFilters nor observeFilters , поэтому на странице нет элемента с идентификатором «new-filter-place», но при удалении других элементов запускается observer.

Может ли кто-нибудь объяснить мне, как функция может быть запущена, когда я никогда ее не вызываю?

Комментарии:

1. Единственное объяснение заключается в том, что вы на самом деле вызываете это.

Ответ №1:

Хорошо, после нескольких часов отладки я нашел это. Был другой скрипт, записанный другим программистом, поэтому в основном он вызвал этот скрипт.