2012-07-26 4 views
10

GWT bietet zwei Möglichkeiten zum Abrufen eines HTML-Elements durch seine eindeutige ID.Unterschied zwischen getElementById-Methoden aus DOM und Dokumentklassen

Was die diference ist zwischen (falls vorhanden):

  • DOM.getElementById ("DIVID"):
innerhalb der gegebenen eindeutige ID zugeordnet

Ruft das Element das gesamte Dokument .

@param ID die Kennung, dessen zugehörige Element
@return dem zugehörigen Element abgerufen werden oder null, wenn keine gefunden wird

  • Document.get(). GetElementById ("DIVID"):

Gibt das Element, dessen ID durch elementId gegeben. Wenn kein solches Element existiert, wird null zurückgegeben. Verhalten ist nicht definiert, wenn mehr als ein Element diese ID hat.

@param elementID die eindeutige ID-Wert für ein Element
@return dem Anpassungselement

Antwort

15

im Grunde nichts. Irgendwann während des Lebenszyklus von GWT wurde der gesamte DOM-Code in das dom-Paket geschrieben. In dem neuen Paket für jeden HTML-Tag ist eine spezifische Element-Klasse verfügbar, wie DivElement, um spezifische Methoden für diese Tags bereitzustellen. Wenn Sie zum Beispiel in Ihrem Beispiel div-Elemente verwenden würden, könnten Sie direkt die DivElement verwenden. Der Code würde für beide Versionen wie folgt aussehen:

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

oder

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

Um kompatibel der alte Code rückwärts sein gehalten wurde. Alle Widget-Klassen verwenden die alte Klasse Element, die auch von DOM.getElementById zurückgegeben wird. Die alte Element Klasse wurde geändert und erweitert die neue Element Klasse, ohne irgendwelche extra. Sie sind also grundsätzlich gleich. Im Allgemeinen sollten Sie nur die Document.get() verwenden. Dies alles kann es etwas verwirrend machen, wenn mit Elementen gearbeitet wird.

+0

Tatsächlich ist es sehr verwirrend. Vor allem, weil das neue Element das alte erbt. Sehr gute Erklärung. Kurz und einfach –

7

Look:

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(); 
} 

So ist es nur ein "Convenience-Wrapper-Methode".

Aber obwohl sie beide zurückkehren Element diese ara Element s aus verschiedenen Paketen, und da beide Element s JavaScriptObject und bedeuten die gleichen sind, können Sie zwischen ihnen ignorieren Vererbungshierarchie entweder mit Java Guss Syntax () oder mit bequeme Methode JavaScriptObject.<T extends JavaScriptObject> cast()

werfen

BTW. Dokument ist JSO-Overlay-Typ so "native this" Punkte bei this;)

+1

Danke dafür. Es ist jetzt noch klarer;) –