首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用MutationObserver时“参数1不属于'Node'”

使用MutationObserver时“参数1不属于'Node'”
EN

Stack Overflow用户
提问于 2020-03-20 15:15:49
回答 2查看 3.3K关注 0票数 0

我是JS的一个新手(以及一般的网络开发人员) :(

目前,我正在为Tamper猴子编写一个小脚本,它负责处理特定类中的特定元素,并在元素发生任何更改时播放声音。(值更改、元素隐藏/显示等)。

目前,我有以下代码:

代码语言:javascript
运行
复制
     var audio = new Audio('URL_to_the_sound');
        var mutationObserver = new MutationObserver(function(mutations) {
      mutations.forEach(function(mutation) {
        console.log(mutation);
          audio.play();
      });
    });
    var target = document.getElementsByClassName('CLASSNAME');
        mutationObserver.observe(target, {
      attributes: true,
      characterData: true,
      childList: true,
      subtree: true,
      attributeOldValue: true,
      characterDataOldValue: true
    });

但是,我的浏览器响应时会出现以下错误:

Uncaught TypeError: Failed to execute 'observe' on 'MutationObserver': parameter 1 is not of type 'Node'.

我应该指出,在同一个类中有几个元素。

我该怎么办?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-20 16:48:18

好的。我想通了。我使用了以下功能:

代码语言:javascript
运行
复制
waitForKeyElements (
            "span.classname"
            , soundfx, false
        );

它的工作方式感谢所有评论这篇文章的人!)

票数 1
EN

Stack Overflow用户

发布于 2020-03-20 15:29:52

您需要迭代getElementsByClassName.返回的每个元素此方法返回没有任何类似循环方法的HTMLCollection,但可以将其转换为Array,然后使用forEach方法:

代码语言:javascript
运行
复制
var targets = document.getElementsByClassName("CLASSNAME");

Array.from(targets).forEach(target => {
  mutationObserver.observe(target, {
    attributes: true,
    characterData: true,
    childList: true,
    subtree: true,
    attributeOldValue: true,
    characterDataOldValue: true
  });
});

下面是基于代码片段的工作示例:https://stackblitz.com/edit/js-qbetr2

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60776866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档