Dom-api MutationObserver使用方法详解

yizhihongxing

Dom-api MutationObserver使用方法详解

概述

MutationObserver是Web API中的一个对象,用于监视DOM树中发生的变化,并提供回调函数,用于在变化发生时执行相应逻辑。

基本用法

MutationObserver的基本用法如下

// 创建一个观察器实例并指定回调函数
const observer = new MutationObserver(function(mutationsList, observer) {
    // 逻辑处理
});

// 选中需要观察的目标节点
const targetNode = document.querySelector('#target');

// 配置观察器选项
const config = { attributes: true, childList: true, subtree: true };

// 将目标节点与观察器实例链接起来并开始观察
observer.observe(targetNode, config);

// 观察结束 
observer.disconnect();

参数说明

  • mutationsList: 对所监视的节点树所做的更改组成的 MutationRecord 对象数组。
  • observer: 观察器实例本身

在调用 observe 方法时,该方法会返回一个 MutationObserver 对象,该对象提供了 disconnect 方法,用于断开当前 observer 对象与观察对象的联系,停止观察。

配置选项

  • attributes: 是否监控目标节点的属性变化
  • childList: 是否监控目标节点的子节点变化
  • subtree: 是否监控目标节点所有子树中的节点变化

MutationRecord对象

MutationRecord 对象,代表单个变化。它包含以下属性:
- type:记录发生的变化类型,有三种类型:"attributes""childList""characterData"
- target:发生变化的节点对象
- addedNodes:如果有新的节点被添加,则该属性包含一个 NodeList 对象
- removedNodes:如果有新的节点被删除,则该属性包含一个 NodeList 对象
- previousSibling:发生变化的节点的前一个兄弟节点
- nextSibling:发生变化的节点的后一个兄弟节点
- attributeName:发生变化的属性名
- oldValue:发生变化的属性或文本节点的旧值

示例

下面有两个例子,用于解释如何使用MutationObserver 对象。

示例 1

此例用于监控指定元素节点的属性变化。

<body>
  <div id="target" class="red" style="font-size: 12px;">Hello World</div>
  <script type="text/javascript">
    const targetNode = document.querySelector('#target');
    const observer = new MutationObserver(function (mutationsList, observer) {
      for (let mutation of mutationsList) {
        if (mutation.type === 'attributes') {
          console.log(`属性 ${mutation.attributeName} 的值由 ${mutation.oldValue} 变为 ${mutation.target.getAttribute(mutation.attributeName)}`);
        }
      }
    });
    observer.observe(targetNode, { attributes: true, attributeOldValue: true });
  </script>
</body>

示例 2

此例用于监控指定元素节点的子节点变化。

<body>
  <ul id="target">
    <li>Item 1</li>
    <li>Item 2</li>
  </ul>
  <script type="text/javascript">
    const targetNode = document.querySelector('#target');
    const observer = new MutationObserver(function (mutationsList, observer) {
      for (let mutation of mutationsList) {
        if (mutation.type === 'childList') {
          console.log(`变化类型为 ${mutation.type},节点 ${mutation.target.nodeName} 的子节点 ${mutation.addedNodes[0].nodeName} 被添加或删除`);
        }
      }
    });
    observer.observe(targetNode, { childList: true });
  </script>
</body>

总结

本篇文章主要介绍了DOM-api中MutationObserver的使用方法,以及相关参数和示例,希望能够帮助读者更深入的了解和应用此对象。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Dom-api MutationObserver使用方法详解 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 使用mixins实现elementUI表单全局验证的解决方法

    使用mixins实现elementUI表单全局验证的解决方法 什么是mixins? 在Vue中,mixins是一种可复用功能的方式,其本质是一个对象,在Vue组件中通过mixins属性将其引入,可以让组件具备该对象的属性和方法。 elementUI表单全局验证的需求 在使用elementUI的表单组件时,我们往往需要对表单进行全局验证,例如输入框不能为空、手…

    JavaScript 2023年6月10日
    00
  • 用js读写cookie的简单方法(推荐)

    以下是详细讲解“用js读写cookie的简单方法(推荐)”的完整攻略: 1. 什么是cookie 1.1 定义 cookie 是一种在客户端存储数据的小文件。在 HTTP 协议中,Web 服务器可以向客户端发送一个 Set-Cookie 的响应头,来告诉客户端保存这个 cookie。之后客户端每次请求响应都会带上这个 cookie,用来告诉服务器用户是谁。 …

    JavaScript 2023年6月11日
    00
  • 使用JS代码实现点击按钮下载文件

    使用JS代码实现点击按钮下载文件需要用到Web API中的Blob和URL两个对象,以下是完整的攻略: 创建Blob对象 Blob对象是二进制大型对象,可以用于存储二进制数据或文本数据。我们可以使用Blob对象作为文件的内容,再利用URL对象生成一个下载链接。 代码示例: let content = ‘Hello, World!’ let blob = ne…

    JavaScript 2023年5月27日
    00
  • 监控 url fragment变化的js代码

    监控URL Fragment变化的JavaScript代码是很常见的一种需求,可以轻松地在单页应用程序(SPA)中实现页面的切换和跳转。以下是实现该需求的攻略: 步骤一:绑定Window对象的hashchange事件 我们可以通过绑定Window对象的hashchange事件来捕捉URL Fragment变化事件。这个事件会在Fragment的值发生变化时被…

    JavaScript 2023年6月11日
    00
  • ASP.NET中常用输出JS脚本的类实例

    在ASP.NET中,常用输出JS脚本的类实例包括以下两个: Page.ClientScript:这个类实例是在ASP.NET中最常用的,它允许在页面的任何位置输出JS脚本。可以使用它的方法RegisterStartupScript来向页面中注册一个JS脚本块,然后在页面渲染后自动将其输出到网页上。示例如下: <asp:Button ID="b…

    JavaScript 2023年5月28日
    00
  • js replace正则相关的诡异问题

    首先,我们需要了解replace方法是用于将一个字符串中的指定字符或正则表达式替换成新的字符串。在使用replace方法时,通常会用到正则表达式来匹配需要替换的字符串。 但是,在使用replace方法时,如果我们将正则表达式中的括号与g全局标记一起使用时,容易出现一些诡异的问题。下面,我将列举两个示例来说明这个问题。 示例一: const str = ’12…

    JavaScript 2023年6月10日
    00
  • JavaScript window.setTimeout() 的详细用法

    JavaScript window.setTimeout() 的详细用法 在 JavaScript 中,window.setTimeout() 方法可以定时执行一个指定的代码块。它接收两个参数,分别是需要执行的代码块和执行时间(单位为毫秒)。 语法 window.setTimeout(code, delay); 其中,code 为需要执行的代码块;delay…

    JavaScript 2023年6月11日
    00
  • JavaScript 解析Json字符串的性能比较分析代码

    为了解析 JSON 字符串,JavaScript提供了内置的JSON对象,其提供了 parse() 方法来将一个 JSON 字符串解析为 JavaScript 对象。 解析 JSON 字符串的性能会受到多种因素的影响,比如字符串长度、字符串结构、解析方式以及语言引擎优化等。 为了准确地分析和比较不同解析方式的性能,我们可以使用不同的测试用例和工具来进行测试和…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部