Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 安全地清除(或移除子元素)div元素_Java_Gwt - Fatal编程技术网

Java 安全地清除(或移除子元素)div元素

Java 安全地清除(或移除子元素)div元素,java,gwt,Java,Gwt,这是我清除给定DivElement子元素的代码: int count = rows.getChildCount(); for (int i=0 ; i < count; i++){ Node child = rows.getChild(i); rows.removeChild(child); } 如何安全地删除DivElement的children?请思考此循环中会发生什么。让我们和三个孩子一起跳水: int count=rows.

这是我清除给定
DivElement
子元素的代码:

    int count = rows.getChildCount();
    for (int i=0 ; i < count; i++){
        Node child = rows.getChild(i);
        rows.removeChild(child);
    }

如何安全地删除
DivElement的children

请思考此循环中会发生什么。让我们和三个孩子一起跳水:

int count=rows.getChildCount()

此时,
count
显然是3,因此我们从0处的
i
开始执行for循环

Node child = rows.getChild(0);
rows.removeChild(child);
现在,
只有2项,但计数仍然是3项。循环的下一步是,
i

Node child = rows.getChild(1);
rows.removeChild(child);
这是包含两项的列表中的第二项-列表中的最后一项,但不是要删除的最后一项。当我们再次进入循环时,
i
是两个,但只剩下一个项目了

Node child = rows.getChild(2); // Exception!

一般来说,当您在遍历列表时修改它时,有几种好的方法

  • 将循环修改为仅在不删除项时递增。当您需要向前走(并使用列表的顺序)但只需要删除某些项时,这是一种常见的方法
  • 不要对循环使用
    ,而只使用
    while
    ,并检查列表是否为空-如果不是,请删除第0项。这对于向前走并删除每个项目很有用。简言之:

     while (rows.hasChildNode()) {
       rows.removeChild(rows.getFirstChild());
     }
    
  • 向后遍历列表-以索引作为列表中的最后一项开始,然后每一步减去一个。这样,无论何时删除一个项目,您都不必担心是否有下一个项目,因为只要您高于零,就始终有上一个项目

    for (int i = count; i >= 0; i--) {
      rows.removeChild(rows.getChild(i));
    }
    
还有一些特别适用于HTML的内容:

  • 元素包含html—在大多数情况下,我们可以简单地调用
    setInnerHTML(“”
    )。请注意,在IE中处理表时,这存在问题

    rows.setInnerHTML("");
    
  • GWT2.6在元素中有一个新方法,特别是
    Element.removeAllChildren()
    。只需在div元素上调用此方法。此方法或多或少运行上面讨论的while循环:

    rows.removeAllChildren();
    

Ghaa,我想+10回答这个问题;为什么我只能+1它?升级将是我的最佳解决方案。谢谢你的提示
rows.removeAllChildren();