#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:
Хорошо, после нескольких часов отладки я нашел это. Был другой скрипт, записанный другим программистом, поэтому в основном он вызвал этот скрипт.