MutationObserver 类更改

Posted

技术标签:

【中文标题】MutationObserver 类更改【英文标题】:MutationObserver class changes 【发布时间】:2018-08-18 12:15:26 【问题描述】:

我正在使用MutationObserver 来检测何时将特定类添加到元素中。

const observer = new MutationObserver((mutations) =>  
    mutations.forEach((mutation) => 
      const el = mutation.target;
      if ((!mutation.oldValue || !mutation.oldValue.match(/\bis-busy\b/)) 
        && mutation.target.classList 
        && mutation.target.classList.contains('is-busy'))
        alert('is-busy class added');
      
    );
 );

observer.observe(document.querySelector('div'),  
  attributes: true, 
  attributeOldValue: true, 
  attributeFilter: ['class'] 
);

我的问题是:有没有更好的方法来验证这是一个新添加的类?目前我正在使用正则表达式来检查该类以前不存在,并使用classList 来检查该类现在存在。看起来很乱

Fiddle

【问题讨论】:

没有其他方法,但您可以使用正则表达式来检查一致性:-) 【参考方案1】:

@sliptype - 您可以通过以下方式进行操作:

const element = document.querySelector('div');
let prevState = element.classList.contains('is-busy');
const observer = new MutationObserver((mutations) =>  
    mutations.forEach((mutation) => 
        const  target  = mutation;

        if (mutation.attributeName === 'class') 
            const currentState = mutation.target.classList.contains('is-busy');
            if (prevState !== currentState) 
                prevState = currentState;
                console.log(`'is-busy' class $currentState ? 'added' : 'removed'`);
            
        
    );
);

【讨论】:

【参考方案2】:

您可以尝试访问目标上的classname

let observer = new MutationObserver(function(mutations) 
    mutations.forEach(function(mutationRecord) 
        if (mutationRecord.target.className === "is-busy") 
            console.log("Class added....")

         else 
            console.log("Class not added....")
        ;
    )
);

let target = document.querySelector("your-div");

observer.observe(target,  attributes : true, attributeFilter : ['style', 'className'] );

【讨论】:

如果当新的变化出现时,is-busy 类已经存在,这是否准确?

以上是关于MutationObserver 类更改的主要内容,如果未能解决你的问题,请参考以下文章

如何在多个节点上使用 MutationObserver?

MutationObserver 上的 Angular 指令单元测试失败:参数 1 不是“节点”类型

MutationObserver监控DOM变化

MutationObserver 点击元素/类

MutationObserver:忽略一个 DOM 动作

IE 11 上的 MutationObserver 语法错误