【问题标题】:How to determine if mutation has been called?如何确定是否调用了突变?
【发布时间】:2020-09-08 04:34:23
【问题描述】:

我在下面有这个突变观察器功能。问题是,如果满足“假”的条件,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
            });

        });

【问题讨论】:

    标签: javascript ajax mutation-observers


    【解决方案1】:

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

    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 true 没有任何作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-16
      • 2023-02-20
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      相关资源
      最近更新 更多