当使用appendchild时,Javascript childNodes找不到div的所有子节点

时间:2010-04-16 17:33:41

标签: javascript

好吧,我希望有人可以帮助我。我在前面道歉,这可能令人困惑。我已经列举了一个例子,试图帮助缓解混乱,因为这听起来更好。

我创建了一个包含一组或一组组的网页。每个小组都有一个小组。简而言之,这个页面将允许我将包含子组的多个组合并到一个新组中。在将旧子组合并为新组之前,该页面将有机会重命名旧子组,以避免混淆。

当一个组被重命名时,它将检查以确保没有一个具有该名称的组。如果有,它将自己复制出自己的组并进入该组,然后删除原始组。如果该组尚不存在,则会创建该组,将其自身复制,然后删除原始组。

也可以重命名子组,如果它存在,它们将移动到具有相同名称的组中,如果不存在,则创建一个新组。

页面有一个主div。主div包含'new sub group'divs。在每个内部是另一个包含'旧子组'div的div。在重命名组时,我使用“新子组”div的子节点循环以查找每个子节点。然后将它们复制到主div中的新div中。

问题的症结在于此。如果我遍历DIV并将其中的所有DIV复制到新的或现有的DIV中,那么一切都很好。然后,当我尝试使用该DIV并将其所有DIV复制到另一个或新DIV时,它总是跳过其中一个移动的DIV。

为简单起见,我复制了下面的整个工作代码。要重新创建问题,请单击名称ewrewrwe旁边的图像,并将其重命名为其他内容。一切都很好。现在以相同的方式单击该新组,并将其命名为其他名称。你会看到它每次跳过一个。

我已将页面链接到此处:http://vtbikenight.com/test.html

链接很干净,这是我个人网站,我用于当地的motorycle组织。

感谢大家的帮助!如果我能澄清任何事情,请告诉我。

我知道代码现在不是最好的,它只是演示代码,我的目的是让概念运行然后简化它。

2 个答案:

答案 0 :(得分:4)

删除节点后需要递减计数,否则跳过刚取代已删除节点的节点。

        for ( var count = 0; count < obj.childNodes.length; count++ )
        {
            if(obj.childNodes[count].tagName == 'DIV'){
                 //alert(obj.childNodes[count].tagName +" - "+obj.childNodes[count].id);
                 RenameOldSubGroup(obj.childNodes[count].id,NewNewGroupName)

                 count--;  // Decrement count to account for node you removed
            }
        }

答案 1 :(得分:3)

在循环中,你有一个递增的计数器,你正在从列表中取出节点。也就是说,只要您从容器中取出某些内容,obj.childNodes.length就会更改