2012-07-26 11 views
10

GWTは、HTML要素を固有のIDで取得する2つの方法を提供します。 (1がある場合)diference何DOMとドキュメントクラスのgetElementByIdメソッドの違い

間:

  • DOM.getElementById( "divIdは"):

は内の指定された一意のIDに関連付けられている要素を取得します 文書全体

@param IDの関連要素関連する要素@return
を取得する、またはnull何も見つからない場合

  • Document.get()ID。getElementByIdを( "divIdは" ):

は、そのID ELEMENTIDによって与えられる要素を返します。そのような要素が存在しない場合はnullを返します。 2つ以上の 要素がこのIDを持つ場合、動作は定義されません。

@paramを整合素子

答えて

15

基本的に何も@return要素
の一意のID値をELEMENTID。 GWTのライフサイクルのある時点で、DOM関連のコード全体がdomパッケージに書き直されました。各HTMLタグの新しいパッケージでは、特定のElementクラス(DivElementなど)を使用して、これらのタグに特定のメソッドを提供します。たとえば、div要素を検索するために使用する場合は、DivElementを直接使用できます。

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

または

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

を古いコードを維持した下位互換性があるために:コードは次のように両方のバージョンが見えるためだろう。すべてのウィジェットクラスは、DOM.getElementByIdによって返される古いElementクラスを使用します。古いElementクラスが変更され、余分なことなしに新しいクラスが拡張されました。したがって、基本的に同じです。一般的にはDocument.get()を使用してください。これにより、要素を扱う際に多少混乱することがあります。

+0

実際、非常に混乱しています。特に新しい '要素'が古い要素を継承しているためです。非常に良い説明。短くてシンプル。 –

7

ルック:

com.google.gwt.user.client.DOM

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

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

com.google.gwt.dom.client.Documentでは、だから、単に "コンビニエンスラッパー・メソッド" です。

しかし、彼らの両方が異なるパッケージからElementこれらARA Element sを返します、そして両方Element sがJavaScriptObjectであり、同じ意味として使用すると、Javaのキャスト構文()またはコンビニエンスメソッドJavaScriptObject.<T extends JavaScriptObject> cast()

のいずれかで継承階層を無視して、それらの間にキャストすることができますが、

Btw。ドキュメントはJSOオーバーレイタイプですので、 "native this"はthisを指します)

+1

ありがとう。今はもっと明確になっている;) –

関連する問題