2010-04-16 54 views
4

好吧,我希望有人能帮助我。我向前道歉,这可能会让人困惑。我已经加入了一个例子来试图帮助缓解混乱,因为听到这个更好。我已经创建了一个包含一组或一组组的网页。每个小组都有一个小组。简而言之,这个页面将允许我将包含子组的多个组合并成一个新组。该页面将有机会在将旧的子组合并为新组之前重新命名,以避免混淆。Javascript childNodes使用appendchild时没有找到div的所有孩子

当一个组被重新命名时,它会检查并确定没有这个名称的组。如果有,它会将自己从自己的组中复制出来,然后删除原来的组。如果该组不存在,它将创建该组,将其自身复制,然后删除原始组。

子组也可以重命名,如果它存在,子组也可以移到组中,如果它不存在,也可以创建一个新组。

该页面有一个主要的div。主div包含'新子组'divs。其中每一个都是另一个包含“旧子组”div的div。在重命名组以查找每个子节点时,我使用循环遍历'new sub group'div的子节点。然后这些被复制到主div中的新div。

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

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

我已经挂在这里的页面:http://vtbikenight.com/test.html

的联系是干净的,这是我的个人网站,我使用一个本地motorycle组我的一部分。

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

我知道代码现在不是最好的,它只是演示代码,我的意图是让这个概念工作,然后简化它。

回答

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

哇,你们真棒!我不能相信我错过了这一点。猜猜写了这么多其他代码或其他东西后,我脑部冻结了。 感谢您的帮助! – yesterdayze 2010-04-16 18:08:20

+0

@yesterdayze:一直发生在我身上。 – 2010-04-16 18:58:33

3

那么在循环中,你有一个计数器,你增加了,你是摆脱列表中的节点。也就是说,每当你从容器中取出东西时,obj.childNodes.length将会改变

+0

+1 - 在我之前就到了那里。将最大迭代存储在变量'for(var count = 0,max = obj.childNodes.length; count 2010-04-16 17:50:16

+1

@Andy:这仍然不起作用,因为数组的长度在循环中发生变化。问题是计数正在增加,跳过现在是一个无动于衷的节点。 – 2010-04-16 17:54:44

+0

@Jeff B:我明白你的意思了。减少计数或循环反向顺序,并预先而不是追加,它应该工作。 – 2010-04-16 18:57:33