需要执行两次函数才能得到结果

时间:2017-02-19 03:25:51

标签: javascript

我有两个函数,第一个函数是“createTables”,用于将表生成到不同的div中,第二个函数是“compare”,用于比较这些表。 这两个函数是一个函数“doIT”的一部分,但我需要执行两次函数“doIT”。第一次它说“无法读取未定义的属性'isEqualNode'”。有什么办法解决吗?

function compare()
{
  var elems = document.getElementsByClassName("rtables");
  if (elems[0].isEqualNode(elems[1])) {
    alert("Elements are equal");
  } else {
  alert("Elements are NOT equal");
  }
}

1 个答案:

答案 0 :(得分:1)

在第一次尝试比较函数运行时,DOM树尚未使用新表更新;因此没有rtables的元素。

第二次调用它时,第一部分不需要完成,因为DOM已经更新,这就是为什么你的compare方法第二次尝试的原因。

这是因为浏览器必须等待javascript完成,才能呈现任何DOM更新(大多数浏览器在单线程实现中更新DOM)。

最简单的方法是将您的函数拆分为两个,并在超时时调用第二个函数(compare),以便浏览器有机会更新DOM。

另一种方法是将比较调用包装在setTimeout中,这样可以让浏览器有机会更新DOM缓存。

这应该可以解决你的问题并且也是很好的编程习惯 - 一个函数应该只做一件特定的事情,这样可以更容易地调试。如果你有一个函数执行三个不同的事情,那么它会更难以追踪错误,很快就会有一个多线怪物。