Нужна помощь в оптимизации наблюдателя мутаций для массива списков узлов - PullRequest
0 голосов
/ 25 мая 2020

Я новичок в API MutationObserver, но я попытался использовать его для следующих целей:

У меня есть узел, который мне нужно скрыть после загрузки, и я добираюсь до узла, наблюдая за узлом добавления до тех пор, пока не будет найден .innerText или свойство.

Проблема в том, что элемент, который я должен наблюдать, дает мне массив из 4 списков узлов. Список узлов, которые нужно скрыть, - [1]. У меня работает следующий код, но я бы сказал, он не очень элегантен. В консоли Chrome dev я получаю множество ошибок Uncaught TypeError: Cannot read property 'innerText' of undefined, и я почти уверен, что наблюдаются больше элементов, чем необходимо, около 200, тогда как узел, который нужно скрыть, является вторым извлеченным.

Вот код MutationObserver. Буду признателен, если вы помогли улучшить его:

// Callback function to run when changes are observed
function callback(mutations) {
    mutations.forEach((mutation) => {
        if (mutation.addedNodes[0].innerText.includes('Documents')) {
            console.log(mutation.addedNodes[0].innerText);
            mutation.addedNodes[0].style.display = 'none';  // Desired note is hidden in the DOM (end result)
        }
    });
}

// Elements to be observed
const node = document.querySelectorAll("div[class^='ControlZone-control']");  // Gives 4 node lists

// Create new instance, pass it callback function, then call .observe() and pass it node to be observed with options
for (let i = 0; i < node.length; i++) {
    const observerInstance = new MutationObserver(callback).observe(node[i], {
        childList: true,
        subtree: true,
    });
}
...