当 node 添加到document.body时,我使用的是window.getComputedStyle.但有一个问题:它总是输出none,但我确信那个子元素有filter风格,而不是none.有什么问题?

我的代码是:

const observer = new MutationObserver((mutationList, observer) => {
    for (const mutation of mutationList) {
        const target = mutation.target;
        const style = window.getComputedStyle(target);
        console.log(style.filter);
    }
});

observer.observe(document.body, { childList: true, subtree: true });

我try 使用setTimeout和其他,但没有解决问题

推荐答案

问题是因为mutationList将包含对Mutations 元素的引用,即.doctor.body,而不是子元素.显然,body没有应用filter.

要解决该问题,您需要询问处理程序中的变异元素以找到新内容(可通过addedNodes属性访问该内容),并判断其中的filter值.

const observer = new MutationObserver((mutationList, observer) => {
  for (const mutation of mutationList) {    
    mutation.addedNodes.forEach(child => {        
      const style = window.getComputedStyle(child);
      console.log(style.filter);      
    });
  }
});

const container = document.querySelector('#container');
observer.observe(container, {
  childList: true,
  subtree: true
});

// for demo only
document.querySelector('button').addEventListener('click', () => {
  const span = document.createElement('span');
  span.textContent = 'foo';
  span.style = 'filter: blur(1px)';
  container.appendChild(span);
});
span {
  display: block;
}
<button>Add element</button>

<div id="container"></div>

Javascript相关问答推荐

如何修复循环HTML元素附加函数中的问题?

拖放仅通过 Select 上传

使搜索栏更改语言

在服务器上放置了Create Reaction App Build之后的空白页面

MathJax可以导入本地HTML文档使用的JS文件吗?

并不是所有的iframe都被更换

保持物品顺序的可变大小物品分配到平衡组的算法

变量的值在Reaction组件中的Try-Catch语句之外丢失

使用ThreeJ渲染的形状具有抖动/模糊的边缘

我怎么在JS里连续加2个骰子的和呢?

rxjs插入延迟数据

WP Bootstrap NavWaker:下拉菜单一次打开所有下拉菜单

JavaScript是否有多个`unfined`?

如何在Press上重新启动EXPO-AV视频?

使用jQuery find()获取元素的属性

有没有办法通过使用不同数组中的值进行排序

如何使用[ModelJSON,ArrayBuffer]调用tf.loadGraphModelSync

按特定顺序将4个数组组合在一起,按ID分组

TypeORM QueryBuilder限制联接到一条记录

递归地将JSON对象的内容上移一级