16

GWT提供两种通过其唯一性检索 HTML 元素的方法ID

之间有什么区别(如果有的话):

  • DOM.getElementById("divID") :

获取与整个文档中给定唯一 ID 关联的元素。

@param id 要检索其关联元素的 id
@return 关联元素,如果没有找到则返回 null

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

返回其 id 由 elementId 给出的元素。如果不存在这样的元素,则返回 null。如果多个元素具有此 ID,则不定义行为。

@param elementId 元素的唯一id值
@return 匹配的元素

4

2 回答 2

20

基本上什么都没有。在 GWT 生命周期的某个时刻,整个 DOM 相关代码被重写到dom包中。在每个 HTML 标签的新包中,都有一个特定的 Element 类可用,例如DivElement为这些标签提供特定的方法。例如,在您的示例中,如果您使用它来查找 div 元素,您可以直接使用DivElement. 两个版本的代码如下所示:

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

或者

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

为了向后兼容,保留了旧代码。所有 Widget 类都使用旧Element类,该类也由DOM.getElementById. 旧Element类被更改并扩展了新Element类,没有任何额外的。所以它们基本上是一样的。一般来说,您应该只使用Document.get(). 在使用元素时,这一切都会让人有些困惑。

于 2012-07-26T14:26:49.847 回答
8

看:

com.google.gwt.dom.client.Document

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

com.google.gwt.user.client.DOM

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

所以它只是一个“方便的包装方法”。

但是,尽管它们都从不同的包中返回Element这些 ara ,并且由于两者都是并且意味着相同,您可以在它们之间进行转换,而忽略继承层次结构,无论是使用 java cast 语法还是使用便捷方法ElementElementJavaScriptObject()JavaScriptObject.<T extends JavaScriptObject> cast()

顺便提一句。文档是 JSO 覆盖类型,因此“本机this”指向this;)

于 2012-07-27T22:57:34.580 回答