首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript/ DOM : MutationObserver,用于检测DOM树中任意位置的“lang`”属性的更改

基础概念

MutationObserver 是 JavaScript 中的一个接口,用于监视 DOM(文档对象模型)树中的更改。它可以检测到 DOM 树中的节点添加、删除、属性更改等变化。MutationObserver 提供了一种异步观察 DOM 变化的机制,不会阻塞页面的其他操作。

相关优势

  1. 异步观察MutationObserver 是异步的,不会阻塞页面的其他操作,提高了性能。
  2. 细粒度控制:可以指定观察的具体变化类型(如属性更改、子节点更改等),提供了细粒度的控制。
  3. 跨浏览器支持:现代浏览器普遍支持 MutationObserver,具有良好的兼容性。

类型

MutationObserver 可以监视以下几种类型的 DOM 变化:

  1. 子节点变化:包括子节点的添加和删除。
  2. 属性变化:包括属性的添加、删除和修改。
  3. 字符数据变化:包括文本内容的变化。
  4. 目标节点变化:包括目标节点的替换。

应用场景

  1. 数据绑定:在框架中实现双向数据绑定,当 DOM 元素的属性发生变化时,自动更新数据模型。
  2. 实时监控:监控 DOM 的变化,进行实时统计或分析。
  3. 动态内容更新:在内容动态更新时,执行特定的逻辑操作。

示例代码

以下是一个使用 MutationObserver 监视 DOM 中 lang 属性变化的示例:

代码语言:txt
复制
// 创建一个观察器实例并传入回调函数
const observer = new MutationObserver((mutationsList, observer) => {
    for (let mutation of mutationsList) {
        if (mutation.type === 'attributes' && mutation.attributeName === 'lang') {
            console.log('The lang attribute was modified:', mutation.target);
        }
    }
});

// 选择要观察变动的节点
const targetNode = document.querySelector('#myElement');

// 配置观察选项
const config = { attributes: true, attributeFilter: ['lang'] };

// 以上面的配置开始观察目标节点
observer.observe(targetNode, config);

// 之后,你可以停止观察
// observer.disconnect();

参考链接

常见问题及解决方法

  1. 观察器未触发
    • 确保目标节点存在并且已经加载到 DOM 中。
    • 确保观察器的配置正确,特别是 attributesattributeFilter 选项。
  • 观察器触发过于频繁
    • 可以通过设置 MutationObserversubtree 选项为 false,只观察目标节点本身的变化,而不观察其子节点的变化。
    • 可以通过设置 MutationObserverattributeFilter 选项,只观察特定的属性变化。
  • 浏览器兼容性问题
    • 确保使用的浏览器支持 MutationObserver 接口。可以通过 Can I use 检查浏览器的兼容性。

通过以上方法,你可以有效地使用 MutationObserver 监视 DOM 中 lang 属性的变化,并解决常见的使用问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

你不知道 MutationObserver

比如监听元素被插入 DOM 或从 DOM 移除,然后添加相应动画效果。或者在富文本编辑器输入特殊符号,如 # 或 @ 符号时自动高亮后面的内容等。...一、MutationObserver 是什么 MutationObserver 接口提供了监视对 DOM 所做更改能力。...DOM 规范 MutationObserver 构造函数,用于创建并返回一个新观察器,它会在触发指定 DOM 事件时,调用指定回调函数。...第一个参数,用于指定所要观察 DOM 节点。第二个参数,是一个配置对象,用于指定所要观察特定变动。...在日常开发过程,除了监听页面的加载和卸载事件之外,我们经常还需要监听 DOM 节点插入和移除事件。比如当 DOM 节点插入 DOM 中产生插入动画,而当节点从 DOM 中被移除时产生移除动画。

3.6K20
  • Js篇-面试题15-通过什么方法可以实现-检测页面 DOM 变化

    通过什么方法可以实现-检测页面 DOM 变化 在MVVM框架,一是监听数据变化,数据驱动视图 通过Object.defineProperties()来监听数据变化,或使用proxy来代理和反射 通过某个...API来监听DOM变化(利用MutationObserver)来监听DOM变化 注意 当通过JS操作了DOM之后,我们需要通知到DOM来更新视图,在vue2.0是用Object.defineProperies...,属性变动,文本内容变动 这个API都可以得到通知,Mutation Observer则是异步触发,DOM变动并不会马上触发,而是要等到当前所有DOM操作都结束才触发,这样是为了应付DOM变动频繁特点...应用 有时候,MutationObserver API都可以派上用场 通知web应用程序访问者,监测当前所在页面发生了一些更改,变化 正在开发一个新javaScript框架,需要根据DOM变化动态加载...javaScript模块 结论 MutationObserver提供了监视DOM所做更改能力,它被设计为旧Mutation Events功能替代品,该功能是DOM3 events规范一部分(来自

    1.7K20

    你不知道 DOM 变动观察器:Mutation observer

    DOM 变动观察器(Mutation observer) MutationObserver 是一个内建对象,它观察 DOM 元素,并在检测更改时触发回调。..."edit " 和 ", please" 合并成一个节点, // 或者可能将它们留在单独文本节点中 }]; 因此,MutationObserver 允许对 DOM 子树任何更改作出反应。...还有一些其他情况,例如第三方脚本会将某些内容添加到我们文档,并且我们希望检测出这种情况何时发生,以调整页面,动态调整某些内容大小等。 MutationObserver 使我们能够实现这种需求。...你将看到 MutationObserver 是如何检测并高亮显示代码段。...MutationObserver 可以跟踪任何更改。config “要观察内容”选项用于优化,避免不必要回调调用以节省资源。

    2.2K10

    JavaScript 高级程序设计(第 4 版)- DOM

    而通过 DOM 对象属性访问事件属性时返回则是一个JavaScript函数对象 进行 DOM 编程时通常会放弃使用 getAttribute()而只使用对象属性 getAttribute()主要用于取得自定义属性值...()或 replaceChild() 元素被添加到文档之后,浏览器会立即将其渲染出来 元素后代 元素可以拥有任意多个子元素和后代元素,因为元素本身也可以是其他元素子元素。...使用 MutationObserver 可以观察整个文档、 DOM 一部分,或某个元素。还可以观察元素属性、子节点、文本,或者前三者任意组合变化。...这些属性给出了元素在页面相对于视口位置。 # 遍历 DOM2 Traversal and Range 模块定义了两个类型用于辅助顺序遍历 DOM 结构。...创建范围并指定它位置之后,可以对范围内容执行一些操作,从而实现对底层 DOM 更精细控制。 每个范围都是 Range 类型实例,拥有相应属性和方法。

    1.2K30

    ResizeObserver在项目中应用

    ResizeObserver在项目中应用ResizeObserver是一个用于监听元素尺寸变化 JavaScript API。它可以在不依赖轮询或事件冒泡情况下,高效地检测元素尺寸变化。<!...MutationObserver和ResizeObserver区别一、监测目标MutationObserver:主要用于观察 DOM 节点变化,包括节点添加、删除、属性修改、文本内容变化等。...它可以监听特定 DOM 元素及其子树这些变化情况。ResizeObserver:专门用于监听 DOM 元素尺寸变化,即元素宽度、高度、边框等尺寸属性改变。...这个尺寸变化可以是由于窗口大小调整、CSS 样式改变导致元素大小改变等原因引起。三、使用场景MutationObserver:适用于需要实时响应 DOM 结构变化场景。...四、性能影响两者在使用不当情况下都可能对性能产生一定影响,但影响方式略有不同:MutationObserver:如果被观察 DOM 结构频繁发生变化,或者回调函数执行了复杂操作,可能会导致性能下降

    8210

    《现代Javascript高级教程》监测DOM变化强大工具

    现代JavaScript高级小册 深入浅出Dar 现代TypeScript高级小 MutationObserver:监测DOM变化强大工具 引言 在Web开发,操作和监测DOM元素变化是一项常见任务...MutationObserverJavaScript提供一个强大API,用于异步监测DOM变化,并在发生变化时执行相应操作。...MutationObserver简介 MutationObserver是一个JavaScriptAPI,用于监测DOM变化。...3.4 自定义组件开发 在自定义组件开发MutationObserver可以用于监听组件内部DOM变化,以及对应属性变化。这样可以在组件内部做出相应处理,如更新组件状态、重新渲染组件等。...总结 MutationObserver是一个强大工具,用于监测DOM变化。

    26330

    动态监听DOM元素高度变化

    MutationObserver 接口提供了监视对 DOM 所做更改能力。...observe(target, options) 这个方法会根据传入 options 配置,观察 DOM 单个 Node 或者所有的子孙节点变化。...、删除或者更改)    attributes: true, // 属性变动    characterData: true, // 节点内容或节点文本变动    subtree: true, /...,只是名字不一样而已 它监听值里面有一个比较重要属性:intersectionRatio 借助这个 API,我设计思路是这样: 当用户滚动网页时候(或者不滚动,此时目标区域已经出现在屏幕)...就是专门监听 DOM 尺寸变化,只不过它还处于试验阶段,各浏览器兼容性很差,所以基本不考虑 具体使用方法可以参考这篇文章:检测 DOM 尺寸变化 JS API ResizeObserver 简介

    4.9K30

    【vue】nextTick源码解析

    MutationObserver这玩意儿是干啥? A、MutationObserver 度娘说他“提供了监视对DOM所做更改能力”。大白话粗糙理解就是他能监听dom修改。...MutationObserver() 该属性提供一个构造函数MutationObserver() ❝ 通过new MutationObserver()可以得到一个新观察器,它会在触发指定 DOM 事件时...「MutationObserverDOM 观察不会立即启动;而必须先调用 observe() 方法来确定,要监听哪一部分 DOM 以及要响应哪些更改。」...配置项相关参数参照MutationObserverInit配置字典 attributes : true|false, 观察受监视DOM元素任意一个属性值变更 attributeFilter: 监听多个特定属性...: true, childList: true }); 当MutationObserver监听到我们注册DOM被改变(无论是DOM节点改变、还是DOM属性被改变,主要监听DOM哪部分改变啥还是看你配置项

    71810

    如何在页面监听“不存在” DOM 节点

    MutationObserver用于监视 DOM 特定节点 Web API 接口,一旦监测到节点发生变化,就会通知回调函数执行相应逻辑。...变动观察器MutationObserver 是 Web API 一个接口,用于监测 DOM 变化。它可以观察特定节点或其子节点任何更改,例如添加、删除或修改子节点、属性变化、文本变化等等。...(XML)oldValue:修改前值,仅适用于特性或文本更改(需设置相应选项 attributeOldValue / characterDataOldValue)Div 水印在上面的文本编辑器例子,...除了在文本框修改会触发监听回调,打开控制台在文档中直接修改也能触发回调:图片这就给我们提供了一种保护 DOM 结构思路:例如在页面打水印场景,只需要用最简单 div 覆盖最上层实现,然后监听这些水印节点...总结MutationObserver 优点在于它可以捕获多种类型 DOM 变化,包括元素添加、删除、属性更改、文本内容变化等,而不需要显式地监听每一种变化类型,这意味着它更灵活、更可靠,并且可以适应各种应用场景

    1.3K40

    W3C:开发专业媒体制作应用(4)

    MutationObserver 是一种捕捉 DOMDOM,文档对象模型是HTML和XML文档编程接口) 更改工具,但它没有提供足够信息来了解确切更改是什么,以及更新 DOM 以广播到连接客户端...虚拟 DOM 不变性允许我们通过三等号 JavaScript 运算符利用浅比较,因此如果客户端不会受到影响,则可以跳过对整个子树分析。 它适用于几乎所有的 DOM 元素,但也有一些特殊情况。...然而在封闭模式下创建 Shadow DOM 对于 JavaScript 来说是不可见。...一些 DOM 更改位置,如果扩展以意想不到方式更改了浏览器 DOM,同步协议可能会混淆。作为该问题部分缓解措施,我们为关键 DOM 元素引入了唯一标识符。...JavaScript 也不公开对象指针和任何类型对象标识,因此我们使用,利用 Map 容器区分属性,其中键可以是任何值,包括 DOM 元素。

    1.4K30

    从Vue.nextTick探究事件循环中线程协作机制

    一、背景 对vue里nextTick()方法理解不清晰,会导致api代码滥用现象,我查看了vue官网说明: Vue.nextTick()用于在下次 DOM 更新循环结束之后执行延迟回调。...变化是实时生效,但对于Dom渲染是延迟生效,并且晚于微任务,早于宏任务。...这样不用频繁触发渲染,而把一轮微任务队列Dom变化收集起来统一渲染也节省了渲染性能消耗。...1、JavaScript引擎线程,处理页面与用户交互,以及操作DOM、CSS样式来给用户呈现一份动态而丰富交互体验和服务器逻辑交互处理,与GUI渲染引擎互斥。...事件循环机制Dom变化是即时生效,但Dom渲染晚于微任务,早于宏任务。而且把微任务队列Dom变化收集起来统一渲染节省了渲染性能消耗。

    1K30

    现代浏览器观察者 Observer API 指南

    出现意义 想要计算Web页面的元素位置,非常依赖于DOM状态显式查询。但这些查询是同步,会导致昂贵样式计算开销(重绘和回流),且不停轮询会导致大量性能浪费。 ?...Mutation Observer:变动观察者 接口提供了监视对DOM所做更改能力。它被设计为旧MutationEvents功能替代品,该功能是DOM3 Events规范一部分。 1....创建观察者 let observer = new MutationObserver(callback); 2. 定义回调函数 上面代码回调函数,会在每次 DOM 变动后调用。...定义要观察目标对象 MutationObserver.observe(dom, options) 启动监听,接收两个参数。 第一参数:被观察DOM节点。...聊天气泡框彩蛋,检测文本指定字符串/表情包,触发类似微信聊天表情落下动画。 输入框热点话题搜索,当输入“#”号时,启动搜索框预检文本或高亮话题。

    3.7K40

    前端二面经典vue面试题指南5

    然后这个组件你可以作用到Vue.component这个全局注册方法里还可以在任意vue模板里使用组件。 也可以作用到vue实例或者某个组件components属性并在内部使用apple组件。...虚拟 DOM 实现原理主要包括以下 3 部分:用 JavaScript 对象模拟真实 DOM ,对真实 DOM 进行抽象;diff 算法 — 比较两棵虚拟 DOM 差异;pach 算法 — 将两个虚拟...DOM 对象差异应用到真正 DOM 。...DOM 和 数据双向绑定,帮我们以可预期方式更新视图,极大提高我们开发效率;跨平台: 虚拟 DOM 本质上是 JavaScript 对象,而 DOM 与平台强相关,相比之下虚拟 DOM 可以进行更方便地跨平台操作...用于依赖发生变化时,触发属性重新计算。

    36330

    vue高频面试题合集(一)附答案

    这消除了 Vue 2 当中基于 Object.defineProperty 实现所存在很多限制:只能监测属性,不能监测对象检测属性添加和删除;检测数组索引和长度变更;支持 Map、Set、WeakMap...不可变 observable:我们可以创建值“不可变”版本(即使是嵌套属性),除非系统在内部暂时将其“解禁”。这个机制可用于冻结 prop 传递或 Vuex 状态以外变化。...会经历以下阶段:生成AST优化codegen首先解析模版,生成AST语法(一种用JavaScript对象形式来描述整个模板)。...DOM 和 数据双向绑定,帮我们以可预期方式更新视图,极大提高我们开发效率;跨平台: 虚拟 DOM 本质上是 JavaScript 对象,而 DOM 与平台强相关,相比之下虚拟 DOM 可以进行更方便地跨平台操作...原理1.在生成 ast 语法时,遇到指令会给当前元素添加 directives 属性2.通过 genDirectives 生成指令代码3.在 patch 前将指令钩子提取到 cbs ,在 patch

    96730

    详解 JS 事件循环、宏微任务、Primise对象、定时器函数,以及其在工作应用和注意事项

    (仅在Node.js) MutaionObserver():浏览器中用于观察DOM变化,监听DOM变化,当DOM发生变化时触发微任务 宏任务和微任务区别 任务特征 宏任务 有明确异步任务需要执行和回调...Vue nextTick 应用 确保 DOM 更新完成:Vue 数据绑定和 DOM 更新是异步。当你更改数据后,DOM 不会立刻更新。...解决状态更新问题:有时候,你可能在同一方法多次更改数据,使用 nextTick 可以确保所有的 DOM 更新都完成后再执行某些操作。...MutationObserver 是一个强大 Web API,用于监视 DOM(文档对象模型)变化。...MutationObserver 功能 MutationObserver 主要用于监视以下类型 DOM 变化: 子节点添加或删除。 属性添加、删除或修改。 文本内容变更。

    25210

    记录一些在此之前不知道Web API

    Intersection Observer API  Intersection Observer API 提供了一种异步检测目标元素与祖先元素或 viewport 相交情况变化方法。...,通过该机制,代码可以监视元素大小更改,并且每次大小更改时都会向观察者传递通知。...MutationObserver 接口提供了监视对 DOM 所做更改能力,它被设计为旧 Mutation Events 功能替代品,该功能是 DOM3 Events 规范一部分。...Web Animations API 允许同步和定时更改网页呈现,即 DOM 元素动画。它通过组合两个模型来实现:时序模型和动画模型。...2.时间属性 //描述动画时间 var aliceTiming = { duration: 3000, iterations: Infinity } 3.播放动画 //指定dom对象,播放动画

    41620
    领券