这是我清除给定孩子的代码DivElement:
int count = rows.getChildCount();
for (int i=0 ; i < count; i++){
Node child = rows.getChild(i);
rows.removeChild(child);
}
Run Code Online (Sandbox Code Playgroud)
但是,我可以看到它抛出:
Caused by: java.lang.AssertionError: Child index out of bounds
Run Code Online (Sandbox Code Playgroud)
如何安全地删除一个孩子DivElement?
Col*_*rth 10
想想这个循环中会发生什么.让我们带三个孩子的div:
int count = rows.getChildCount();
在这一点上,显然count是3,所以我们从零开始通过for循环i.
Node child = rows.getChild(0);
rows.removeChild(child);
Run Code Online (Sandbox Code Playgroud)
现在,rows只有2个项目,但计数仍然是3.下一步循环,i是一个.
Node child = rows.getChild(1);
rows.removeChild(child);
Run Code Online (Sandbox Code Playgroud)
这是列表中的第二个项目,包含两个项目 - 列表中的最后一项,但不是要删除的最终项目.当我们再次进入循环时,i是两个,但只剩下一个项目了!
Node child = rows.getChild(2); // Exception!
Run Code Online (Sandbox Code Playgroud)
在一般情况下,修改列表时为您遍历它,也有一些很好的办法.
不要使用for循环,而只是a while,并检查列表是否为空 - 如果不是,请删除第0项.这对于前进并删除每个项目非常有用.简单地说:
while (rows.hasChildNode()) {
rows.removeChild(rows.getFirstChild());
}
Run Code Online (Sandbox Code Playgroud)向后走列表 - 从索引开始作为列表中的最后一项,并在每一步中减去一个.这样,每当你删除一个项目时,你都不需要担心是否有下一个项目,因为总有一个前一个项目,只要你高于零!
for (int i = count; i >= 0; i--) {
rows.removeChild(rows.getChild(i));
}
Run Code Online (Sandbox Code Playgroud)还有一些特别适用于HTML:
元素包含html - 在大多数情况下,我们可以简单地调用setInnerHTML("").请注意,在处理表时,这在IE中存在问题.
rows.setInnerHTML("");
Run Code Online (Sandbox Code Playgroud)GWT 2.6在Element中有一个新方法,具体来说Element.removeAllChildren().只需在div元素上调用此方法即可.这个方法或多或少运行上面讨论的while循环:
rows.removeAllChildren();
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
179 次 |
| 最近记录: |