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 Global decodeURI() 函数

    以下是关于JavaScript Global对象中decodeURI()函数的完整攻略,包括两个示例说明。 JavaScript Global对象中的decodeURI()函数 JavaScript Global对象中的decodeURI()函数用于解码一个编码过的URI字符串。URI是Uniform Resource Identifier的缩写,它是一个用…

    JavaScript 2023年5月11日
    00
  • Python实现的爬取百度文库功能示例

    下面我将为您详细讲解“Python实现的爬取百度文库功能示例”的完整攻略。 简介 百度文库是百度公司提供的一个文档在线分享平台。用户可以在该平台上发布并分享自己的文档,也可以在平台上查找和下载其他用户分享的文档。本文将介绍如何使用Python实现爬取百度文库的功能。 环境配置 使用Python进行爬取的前提是需要配置好相关的环境。配置步骤如下: 安装Pyth…

    JavaScript 2023年5月28日
    00
  • yepnope.js 异步加载资源文件

    yepnope.js是一个轻量级的异步资源加载工具,可以帮助我们在加载网页中的资源文件时,进行更灵活高效的操作。下面我为大家介绍一下如何使用yepnope.js进行异步加载资源文件的操作。 安装yepnope.js yepnope.js可以通过npm安装,也可以直接在HTML文件中通过CDN链接引入。 <!DOCTYPE html> <ht…

    JavaScript 2023年5月27日
    00
  • js Element Traversal规范中的元素遍历方法

    JS Element Traversal规范在DOM操作中提供了一些方便的元素遍历方法,能够帮助我们更方便地查找或操作页面元素。 其中主要包括以下几个方法: children element.children方法会返回指定元素的所有子元素节点,不包含文本节点或注释节点。 示例: <div id="parent"> <p&…

    JavaScript 2023年6月10日
    00
  • Vue项目history模式下微信分享爬坑总结

    「Vue项目history模式下微信分享爬坑总结」这篇攻略主要是在Vue项目开发中,针对微信分享的一些问题和解决方案进行总结,并重点介绍了在使用history模式下遇到的问题和解决方法,下面是详细的攻略: 1. 什么是Vue项目history模式下的微信分享? 在Vue的路由模式下,有两种路由方式:hash和history。history模式利用了HTML5…

    JavaScript 2023年6月11日
    00
  • JavaScript实例–创建一个欢迎cookie

    接下来我将为您详细讲解如何创建一个欢迎cookie的完整攻略。 1. 前言 在开始之前,我们需要明确一些概念: 1.1 cookie是什么? Cookie(中文:HTTP cookie)是指网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。 1.2 Javascript中的document.cookie是什么? do…

    JavaScript 2023年6月11日
    00
  • asp.net下让Gridview鼠标滑过光棒变色效果

    下面是“asp.net下让Gridview鼠标滑过光棒变色效果”的完整攻略: 1. 添加样式表 首先,我们需要在页面中添加一个样式表,用来定义鼠标滑过时的样式: <style> .gridview-highlight:hover { background-color: #f2f2f2; } </style> 这是一个简单的样式表,将鼠…

    JavaScript 2023年6月11日
    00
  • javascript实现回到顶部特效

    当页面内容比较长时,用户需要不断地向下滚动页面才能浏览全部内容,但有时候用户想快速回到页面顶部,此时,通过JavaScript实现回到顶部特效便能提高用户的使用体验。 下面是“JavaScript实现回到顶部特效”的完整攻略。 一、获取页面滚动高度 使用window.scrollY属性或window.pageYOffset属性可以获取文档当前的纵向滚动距离。…

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