Разница между методами 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
;)