Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 变异观察者是否只监听本地更改?_Javascript_Mutation Observers - Fatal编程技术网

Javascript 变异观察者是否只监听本地更改?

Javascript 变异观察者是否只监听本地更改?,javascript,mutation-observers,Javascript,Mutation Observers,我想使用mutationobserver来监听一个特定的类添加(step_active)到一个类为(step)的元素中,但是这看起来并不像预期的那样 如果我通过element.classList.add()直接添加该类,将触发我的事件。然而,当网站发布这些类更改时,我的事件不会被触发 为什么会这样 以下是我当前代码的通用格式: var target = document.querySelectorAll(".step"); for (var i = 0; i < target.length

我想使用mutationobserver来监听一个特定的类添加(step_active)到一个类为(step)的元素中,但是这看起来并不像预期的那样

如果我通过element.classList.add()直接添加该类,将触发我的事件。然而,当网站发布这些类更改时,我的事件不会被触发

为什么会这样

以下是我当前代码的通用格式:

var target = document.querySelectorAll(".step");
for (var i = 0; i < target.length; i++) {
    var observer = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {
            var trigger = mutation.target;
            if(trigger.classList.contains('step_active')){
              window.dataLayer.push({
                event: 'Step: ' + mutation.id
              });
            }
        })
    });
    var config = {attributes: true, childList: true, subtree: true};
    observer.observe(target[i], config);
};

有人能解释一下我在这里遗漏了什么/误解了什么吗?

正如wOxxOm所指出的,这是由于我观察到的元素被替换而不是被操纵,从而破坏了我的突变观察者

  • 可以通过人为添加一个类和 观察它是否会随着您的进步而保留
  • 或者在DOM中将MutationObserver设置为更高级别并记录日志 突变记录

  • 这仅仅意味着站点将替换目标元素(或其在树上更高位置的父元素),因此不会通知您的观察者,因为旧元素已不在实际的DOM中。非常感谢。
    setTimeout(function(){
    target[0].classList.add('step_active');
    }, 1000);