我是JS的一个新手(以及一般的网络开发人员) :(
目前,我正在为Tamper猴子编写一个小脚本,它负责处理特定类中的特定元素,并在元素发生任何更改时播放声音。(值更改、元素隐藏/显示等)。
目前,我有以下代码:
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'.
我应该指出,在同一个类中有几个元素。
我该怎么办?
发布于 2020-03-20 16:48:18
好的。我想通了。我使用了以下功能:
waitForKeyElements (
"span.classname"
, soundfx, false
);
它的工作方式感谢所有评论这篇文章的人!)
发布于 2020-03-20 15:29:52
您需要迭代getElementsByClassName.返回的每个元素此方法返回没有任何类似循环方法的HTMLCollection,但可以将其转换为Array,然后使用forEach方法:
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
https://stackoverflow.com/questions/60776866
复制相似问题