我有两个函数,第一个函数是“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");
}
}
答案 0 :(得分:1)
在第一次尝试比较函数运行时,DOM树尚未使用新表更新;因此没有rtables
的元素。
第二次调用它时,第一部分不需要完成,因为DOM已经更新,这就是为什么你的compare
方法第二次尝试的原因。
这是因为浏览器必须等待javascript完成,才能呈现任何DOM更新(大多数浏览器在单线程实现中更新DOM)。
最简单的方法是将您的函数拆分为两个,并在超时时调用第二个函数(compare
),以便浏览器有机会更新DOM。
另一种方法是将比较调用包装在setTimeout
中,这样可以让浏览器有机会更新DOM缓存。
这应该可以解决你的问题并且也是很好的编程习惯 - 一个函数应该只做一件特定的事情,这样可以更容易地调试。如果你有一个函数执行三个不同的事情,那么它会更难以追踪错误,很快就会有一个多线怪物。