2017-02-19 57 views
2

我有两个函数,第一个函数是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

显然,当调用compare时,没有类'rtables'的元素。 – Ryan

+0

在HTML呈现之前你是否调用了你的函数? –

+0

这两个函数都是同时调用的。 –

回答

1

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

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

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

最简单的方法是将你的函数分成两部分,然后调用第二部分(compare),让浏览器有机会更新DOM。

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

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

+0

我虽然因为这个,但问题是我需要调用它时点击按钮,所以这就是为什么这两个在相同的功能..当我试图在这些功能之间的输入等待其延迟的主要功能,当按钮被点击时调用.. –

+0

另一种方式(并不那么简单)是在与调用者的“compare”上实现一个'setTimeout'。 –

+0

好的,我会在晚些时候尝试它实际上在床上.. 5月.. IT生活无论如何感谢您的帮助。 –

相关问题