2012-07-26 40 views
10

GWT提供了兩種通過其唯一ID檢索HTML元素的方法。DOM和文檔類的getElementById方法之間的區別

什麼是性差異之間(如果有的話):

  • DOM.getElementById( 「DIVID」):

獲取與中給定唯一的ID相關聯的元素整個 文件。

@參數ID其相關元件要被檢索
@返回相關聯的元件,或者null如果沒有找到

  • Document.get()。的getElementById( 「DIVID」 的ID。 ):

返回其ID被elementId給出的元素。如果不存在這樣的元素,則返回null。如果多個 元素具有此ID,則行爲未定義。

@參數elementId值的唯一ID的一個元件
@返回所述匹配元件

回答

15

基本上沒有什麼。在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()。這一切都可能使它在處理元素時產生一些混淆。

+0

事實上,它是非常混亂。特別是因爲新的元素繼承了舊元素。非常好的解釋。短而簡單 – 2012-07-26 14:43:49

7

看:

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 Element期從不同的包,併爲雙方Element s爲JavaScriptObject並意味着同樣的,你可以在它們之間施放忽略繼承層次無論是用java投語法()或簡便方法JavaScriptObject.<T extends JavaScriptObject> cast()

Btw。文件是JSO覆蓋類型,因此「原生this」指向this;)

+1

感謝您的。現在更清楚了;) – 2012-07-28 13:51:03

相關問題