首页 > 解决方案 > 比 `setTimeout` 和 `.length` 更好的检查元素是否存在的方法

问题描述

目前我有一个函数可以在动态生成元素后单击它,问题是我正在使用这样的东西:

if($('#element').length){
  $('#element').click();
} else {
  setTimeout(function(){
  $('#element').click();
  }, 500);
}

我一直调用这个函数,直到元素出现。有没有更好的方法来继续检查元素是否出现?我尝试使用循环,但最终以无限循环使浏览器崩溃

标签: javascriptjquery

解决方案


您可以使用 Mutation Observer API 来检查何时添加了元素。

var callback = function(mutations) {
// check the mutations and perform whatever you wish to do
}
var observer = new MutationObserver(callback);
// provide the node that you wish to observe for mutations and the configuration to use
observer.observe(<targetNode>, <config>);
...
...
observer.disconnect();

编辑:添加小提琴作为示例,其中每个动态添加的段落在添加到 DOM 时都会作为警报回显。

jsFiddle - 使用 Mutation Observer API 回显动态添加的段落


推荐阅读