javascript - 突变观察者添加节点不可用即时(延迟)
问题描述
我正在使用突变观察器来监视添加到 DOM 中的特定元素,而不是在未找到元素时使用带有 return 的 setInterval。分享一下我的代码:
而不是这个:
var = myinterval = setInterval(function(){
if($('#my-div-id').length == 0) return;
$('#my-div-id').before('<div>I am an added div</div>');
});
我用这个:
var createMutationObserver = function(mutationObjectName, targetNodeName, dataFunction, mutationObjectType = 'id', targetNodeType = 'id'){
if( $(mutationObjectType == 'id' ? '#' + mutationObjectName : '.' + mutationObjectName).length !== 0){
dataFunction();
return;
}
let targetNode = targetNodeType.toLowerCase() == 'id' ? document.getElementById(targetNodeName) : (targetNodeType.toLowerCase() == 'class' ? document.getElementsByClassName(targetNodeName)[0] : '' );
let mutationObjectTypeClean = mutationObjectType.toLowerCase() == 'id' ? 'id' : (mutationObjectType.toLowerCase() == 'class' ? 'className' : '' );
let currentMutation = new MutationObserver(function(mutationsList, observer) {
// Use traditional 'for loops' for IE 11
for(var mutation of mutationsList) {
if (mutationType === 'childList' && mutation.type === 'childList') {
if(mutation.addedNodes.length !== 0){
if(mutation.addedNodes[0][mutationObjectTypeClean] == mutationObjectName){
// Code added here
dataFunction();
// Disconnect observer
observer.disconnect();
break;
}
}
}
}
});
currentMutation.observe(targetNode, { attributes: true, childList: true, subtree: false });
};
createMutationObserver('documentBody' ,'my-div-id', () => {
$('#my-div-id').before('<div>I am an added div</div>');
console.log($('#my-div-id').length);
});
我使用的“documentBody” id 是我的 body 标签的 id。
我遇到的问题是,当我添加 id 为“my-div-id”的 div 时,突变发生并且突变观察者工作,但是 id 为“my-div-id”的 div 不存在,我得到 0当我控制台日志并且之前的语句不起作用时。
任何想法为什么即使突变已经触发,元素也不存在?
解决方案
推荐阅读
- sql-server - '=' 附近的语法不正确。得到错误
- google-apps-script - 从 Google 电子表格生成文本文件并将其链接返回到电子表格中的单元格
- angular - Failed build on Travis, version incompatibilities
- react-native - marginBottom 和 marginTop 与百分比切割子
- android - How do i generate refresh and access token for Google Play Developers API
- .net - One `Using` statement per script?
- google-chrome - 所有developers.google.com 页面都以移动模式显示在我的计算机上
- angular - AngularCli 将节点模块导入到 Angular app.module loadChildren
- javascript - Move an object along a circle in fabricjs
- r - 在 R 中分析变量随时间的协变