首页 > 解决方案 > JavaScript/DOM:MutationObserver 检测 DOM 树中任何位置的 `lang` 属性的变化

问题描述

是否可以lang使用一个 MutationObserver 检测文档中任何位置的属性更改?我想也许像下面这样的东西可以解决问题,但它没有按预期工作(只检测根元素的 lang 属性更改)。


// This is NOT working as expected!!!

const observer = new MutationObserver(() => {
  console.log('lang attribute has changed');
});

observer.observe(document, {
  attributes: true,
  attributeFilter: ['lang'],
  subtree: true

  // if I add `childList: true` here as sometime suggested on stackoverflow,
  // lang attribute changes somewhere deep in the document are
  // still not detected.
});

标签: javascriptdommutation-observers

解决方案


以下代码(与问题相同)确实有效,并将检测lang文档中任何位置的属性更改。但重要的是要知道,只会lang检测到 light DOM 中的属性变化,而不会观察到 shadow DOM 中的变化。

const observer = new MutationObserver(() => {
  console.log('lang attribute has changed');
});

observer.observe(document, {
  attributes: true,
  attributeFilter: ['lang'],
  subtree: true
});

推荐阅读