如何确定是否已调用突变?

How to determine if mutation has been called?

我下面有这个变异观察者函数。问题是,如果满足“false”的条件,console.log 将在浏览器中记录多次。我认为解决此问题的最佳方法是在此处添加一些内容,如果满足突变则不会 运行 起作用。

在 else if 条件之后添加 mutationObserver.disconnect(); 是完成此操作的最佳方法吗?

            window.addEventListener('DOMContentLoaded', (event) => {
            
            // Listening to Class Changes //
            var mutationObserver = new MutationObserver(function (mutations) {
                mutations.forEach(function (mutation) {
                    var change = mutation.target.classList.contains('hidden-class');
                    if (change === true) {
                        return true;
                    }
                    else if (change === false) {
                        console.log('this mutation is visible');
                        }
                });
            })
            mutationObserver.observe(document.getElementById('cart-wrapper'), {
                attributes: true,
                characterData: true,
                childList: true,
                subtree: true,
                attributeOldValue: true,
                characterDataOldValue: true
            });

        });

改为使用 .some 来迭代突变并查看是否有任何目标的 class 列表包含 class:

var mutationObserver = new MutationObserver(function (mutations) {
  const somethingJustMutatedIsHidden = mutations.some(
    mutation => mutation.target.classList.contains('hidden-class')
  );
  if (somethingJustMutatedIsHidden) {
    // do something?
  } else {
    console.log('this mutation is visible');
  }
})

请记住 forEach 会忽略它的 return 值;您当前拥有的 return true 没有任何作用。