2012-07-26 13 views
10

GWT ofrece dos formas de recuperar un elemento HTML por su único ID.Diferencia entre los métodos getElementById de DOM y las clases de documento

¿Cuál es la diference (si lo hay) entre:

  • DOM.getElementById ("divID"):

Obtiene el elemento asociado con el identificador único dado dentro de todo el documento .

@param ID ID cuyo elemento asociado es para ser recuperados
@return el elemento asociado, o null si ninguno se encuentra

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

devuelve el elemento cuyo id está dado por elementId. Si no existe tal elemento, devuelve nulo. El comportamiento no está definido si más de un elemento tiene esta identificación.

@param elementId el valor de identificación único para un elemento
@return el elemento coincidente

Respuesta

15

básicamente nada. En algún momento durante el ciclo de vida de GWT todo el código relacionado con DOM fue reescrito en el paquete dom. En el nuevo paquete para cada etiqueta HTML, hay disponible una clase Element específica, como DivElement, para proporcionar métodos específicos para estas etiquetas. Por ejemplo, en su ejemplo, si lo usa para buscar elementos div, puede usar directamente el DivElement. El código haría para ambas versiones el siguiente aspecto:

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

o

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

Para ser compatible con versiones anteriores del código antiguo se mantuvo. Todas las clases de widgets usan la antigua clase Element que también es devuelta por DOM.getElementById. Se cambió la antigua clase Element y se amplía la nueva clase Element, sin ningún extra. Entonces son básicamente lo mismo. En general, debería usar el Document.get(). Todo esto puede hacer que sea algo confuso cuando se trabaja con elementos.

+0

De hecho, es muy confuso. Especialmente porque el nuevo 'Element' hereda el anterior. Muy buena explicación. Corto y simple –

7

Look:

en com.google.gwt.dom.client.Document

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

en com.google.gwt.user.client.DOM

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

Así que es sólo un "método de envoltura conveniencia".

Pero aunque ambos vuelven Element estos ara Element s de diferentes paquetes, y como ambos Element s son JavaScriptObject y significan lo mismo se puede lanzar entre ellos ignorando jerarquía de herencia, ya sea con la sintaxis de Java colado () o con el método de conveniencia JavaScriptObject.<T extends JavaScriptObject> cast()

Por cierto. El documento es un tipo de superposición JSO, por lo que "this nativo" apunta a this;)

+1

Gracias por eso. Ahora es aún más claro;) –

Cuestiones relacionadas