Dom-api MutationObserver使用方法详解

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日

相关文章

  • 详解JavaScript中的事件流和事件处理程序

    详解JavaScript中的事件流和事件处理程序 JavaScript中的事件是指用户与网页进行交互时所产生的所有动作,比如鼠标点击、键盘敲击、窗口滚动等等。JavaScript需要对这些事件进行处理,而事件的类型和顺序则由事件流来控制。本篇文章将详细介绍JavaScript中的事件流和事件处理程序,并提供示例说明。 事件流 事件流描述的是从页面中接收事件的…

    JavaScript 2023年5月18日
    00
  • js中的变量

    在JavaScript中,我们用var关键字来声明一个变量,var关键字后紧跟变量的名称,例如: var a1 = 40; a1就是变量的名称,用来标识一个变量,所以它又称为变量的标识符。一个变量的标识符必须是由字母、数字、下划线组成,但首字符不能为数字,如: 1user、#user 都不是正确的标识符,而user1、_user是正确的标识符。在JavaSc…

    JavaScript 2023年5月9日
    00
  • JS数组求和的常用方法实例小结

    当我们需要对一个数组中的数值进行求和的时候,我们可以使用不同的 JavaScript 数组求和的方法。本文将介绍一些常用的方法,包括遍历数组和使用 reduce() 方法,这些方法都可以很方便地实现对数组的求和操作。 遍历数组求和 通过遍历数组,我们可以把数组中的每个元素累加起来,从而求出数组的和。以下是一个使用 for 循环遍历数组的示例代码: let a…

    JavaScript 2023年5月27日
    00
  • GridView选择记录同时confirm用户确认删除

    GridView选择记录同时confirm用户确认删除 简介 由于GridView是ASP.NET Web Forms常用的控件之一,经常会被用来展示和编辑自定义数据源。在开发中,经常会遇到用户想要删除某一项记录的需求。这时候,我们需要使用JavaScript来先确认用户是否真正想要删除该记录。 步骤 第一步:在GridView中添加CheckBox列 我们…

    JavaScript 2023年6月11日
    00
  • Js操作DOM元素及获取浏览器高宽的简单方法

    Js操作DOM元素及获取浏览器高宽的简单方法的攻略如下: 操作DOM元素 选择元素 在Javascript中,选择DOM元素是很重要的一步。有很多方法可以选择DOM元素,但是最常用的方法是使用document.querySelector和document.querySelectorAll这两个方法。 document.querySelector方法返回一个与…

    JavaScript 2023年6月10日
    00
  • JavaScript实现公告栏上下滚动效果

    下面是详细讲解“JavaScript实现公告栏上下滚动效果”的完整攻略。 概述 公告栏上下滚动效果是一个常见的网页特效,可以通过JavaScript实现。具体来说,当一组公告内容超出公告栏的显示范围时,可以让公告内容向上或向下滚动,以便显示所有内容。实现这一效果需要用到JavaScript的定时器、DOM操作、CSS样式等知识点。 实现步骤 下面介绍实现公告…

    JavaScript 2023年6月11日
    00
  • 在layui中使用form表单监听ajax异步验证注册的实例

    下面我来详细讲解一下“在layui中使用form表单监听ajax异步验证注册的实例 ”的攻略步骤。 1. 准备工作 在使用layui实现前端异步验证的功能之前,我们需要先引入layui。在网页中加入以下代码: <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax…

    JavaScript 2023年6月10日
    00
  • JavaScript检查子字符串是否在字符串中的方法

    当需要判断一个字符串是否包含某个子字符串时,我们可以使用JavaScript中提供的字符串方法来实现。以下是常用的三种方法: 方法一:indexOf() indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。如果要检查的子字符串在主字符串中不存在,那么该方法会返回 -1。 例如:我们要检查字符串 “hello world” 是否包含 “w…

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