Mutation Observer或DOMNodeInserted

时间:2016-10-17 13:18:27

标签: javascript

我有一个脚本,我在Adobe Captivate的第一张幻灯片上使用,自动执行任务ok创建,课程,脚本创建UX,导航元素,介绍/结束动作,游戏,插入带有字符的spritesheets等等......

我使用DOMNodeInserted直到知道检查幻灯片上的修改,当用户转到下一张幻灯片时,元素被添加到DOM并且页面内容被更改我使用此计时器直到现在才调用功能:

function detectChange(){
	var slideName = document.getElementById('div_Slide')
	slideName.addEventListener("DOMNodeInserted", detectChange, false); 
    updateSlideElements();
    setTimeout(updateSlideElements, 100);
}

所以我现在尝试使用变异Observer:

var observer = new MutationObserver(function(mutations, observer) {
    updateSlideElements();
});

observer.observe(document.getElementById('div_Slide').firstChild, {
    attributes: true,
    childList:true
});

但这是发生的事情,在使用setTimeout之前我可以达到以下元素:

var motionText2 = document.querySelectorAll('div[id*=motion][class=cp-accessibility]');

这个元素是第一个孩子:

enter image description here

可以找到元素:

enter image description here

但现在使用mutationObserver,控制台返回空:

enter image description here

1 个答案:

答案 0 :(得分:0)

我只是在观察者中使用setTimeout并观察父容器而不是firstChild:

var observer = new MutationObserver(function(mutations, observer) {
    setTimeout(updateSlideElements, 100);
});
observer.observe(document.getElementById('div_Slide'), {
    attributes: true,
    childList:true
    //subtree:true
});