Удаление всех дочерних элементов из элемента работает при использовании getLastChild(), но вызывает исключение NullPointerException при использовании getFirstChild()

#dom #gwt #browser #gxt

#dom #gwt #браузер #gxt

Вопрос:

Я использую GWT, и мне приходится манипулировать DOM напрямую из-за глючного виджета, который неправильно центрируется. Я написал следующий код для очистки дочерних элементов в <body> элементе во время просмотра transistions, потому что RootPanel.clear() не очищает HTML полностью:

 while (root.hasChildNodes()) {
    root.removeChild(root.getFirstChild());
}
  

Но оно вызывает исключение NullPointerException. Однако простое изменение getFirstChild() на getLastChild() работает отлично.

 while (root.hasChildNodes()) {
    root.removeChild(root.getLastChild());
}
  

Есть идеи, почему?

Ответ №1:

Когда вы удаляете первого дочернего элемента, первый дочерний элемент теперь равен null. второй дочерний элемент — это то, что вам нужно будет удалить сейчас вместо первого, и так далее. Итак, вызов getFirstChild возвращает вам значение null, и вы можете увидеть NPE. Это не относится к getLastChild.

Комментарии:

1. да, но как только я удаляю child1, child2 больше не является child2, он становится child1.

2. Ну, если бы это было так, вы бы не увидели исключения. Просто прочитайте значение getFirstChild() после удаления первого. Вы видите значение null?