Разница между методами getElementById из классов DOM и Document

GWT предлагает два способа извлечения элемента HTML его уникальным ID.

Какая разница (если таковая существует) между:

  • DOM.getElementById( "divID" ):

Получает элемент, связанный с данным уникальным идентификатором в течение всего документ.

@param id id, связанный элемент которого должен быть восстановлен
@верните связанный элемент или null, если ни один не найден.

  • Document.get(). getElementById ( "divID" ):

Возвращает элемент, идентификатор которого задается elementId. Если такой элемент не существует, он возвращает null. Поведение не определяется, если более одного     элемент имеет этот идентификатор.

@param elementId уникальное значение id для элемента
@верните соответствующий элемент

Ответ 1

В принципе ничего. В какой-то момент жизненного цикла GWT весь код, связанный с DOM, был переписан в пакет dom. В новом пакете для каждого тега HTML доступен специальный класс Element, например DivElement для предоставления определенных методов для этих тегов. Например, в примере, если вы будете использовать его для поиска элементов div, вы можете напрямую использовать DivElement. Код для обеих версий выглядит следующим образом:

DivElement divID = (DivElement) Document.get().getElementById("divID");

или

DivElement divID = (DivElement) DOM.getElementById("divID").cast();

Чтобы быть обратно совместимым, старый код был сохранен. Все классы виджетов используют старый класс Element, который также возвращается DOM.getElementById. Старый класс Element был изменен и расширяет новый класс Element без каких-либо дополнительных ресурсов. Таким образом, они в основном одинаковы. В общем вы должны просто использовать Document.get(). Все это может смутить при работе с элементами.

Ответ 2

Облик:

in com.google.gwt.dom.client.Document

public final native Element getElementById(String elementId) /*-{
    return this.getElementById(elementId);
}-*/;

in com.google.gwt.user.client.DOM

public static Element getElementById(String id) {
    return Document.get().getElementById(id).cast();
}

Так что это просто "метод обертки удобства".

Но хотя оба они возвращают Element эти ara Element из разных пакетов, а как Element являются JavaScriptObject и означают то же самое, что вы можете использовать между ними, игнорируя иерархию наследования либо с синтаксисом java cast () или с помощью метода удобства JavaScriptObject.<T extends JavaScriptObject> cast()

Btw. Документ представляет собой тип наложения JSO, поэтому "native this" указывает на this;)