2011-12-21 57 views
8

我無法確定Element.setAttribute(String name, String value)Element.setPropertyString(String name, String value)之間的差異。有區別嗎?當嘗試在文本輸入上設置佔位符時,哪個更適合?我一直在做getElement().setPropertyString("placeholder", "this is a placeholder");,它的工作原理,但它是適當的方式來做到這一點?GWT元素setAttribute vs setPropertyString

documentation for DOM,setAttribute(Element, String, String)已棄用,表示使用「更恰當地命名爲setElementProperty(Element, String, String)」。這是否意味着應該使用Element的同名命名方法?

回答

6

問題是,在IE6和IE7(和IE8在兼容模式下),setAttribute實際上設置了屬性(IE確實沒有什麼區別; IE8添加了一個可選參數getAttribute以允許檢索DOM規範中定義的屬性;見http://msdn.microsoft.com/en-us/library/ms536429v=vs.85.aspx)。

BTW,JavaDoc的參考應該是http://google-web-toolkit.googlecode.com/svn/javadoc/latest/index.html(不是一個GWT 1.5,這是嚴重過時),並且你應該使用com.google.gwt.dom.client.Element,而不是com.google.gwt.user.client.DOMElement有一個setAttribute,它在除IE6/7(或IE8的類似模式)以外的每個瀏覽器中設置屬性。

但大多數情況下,您應該只使用DOM屬性而不是屬性。例如,您想要將tab index作爲數字,而不是字符串。你想要在沒有屬性的,而不是一個null,你不得不自己處理(例如input元素默認爲type=text當沒有type屬性的屬性的默認值/狀態; getAttribute("type")將返回nullgetPropertyString("type")會返回"text")。

+0

根據GWT 2中的Javadoc。4,'getAttribute'「返回:Attr的值爲一個字符串,或者是空字符串,如果該屬性沒有指定或默認值」,不是null,但不影響其餘的答案。 +1 – 2011-12-21 15:07:29

+0

此外,這是如何影響屬性/屬性的移除?例如,有一個'removeAttribute()',但沒有'removeProperty()'。假設我有''並且想要移除'max'限制。這將如何實現? – 2011-12-21 15:15:38

+0

將其設置爲可以移除約束的任何值,例如空字符串(也可以嘗試'null')。請參閱http://dev.w3.org/html5/spec/common-input-element-attributes.html#the-min-and-max-attributes和http://dev.w3.org/html5/spec/states -of-的型attribute.html#號態型數 – 2011-12-21 16:54:46

6

屬性和屬性之間有區別。簡而言之,屬性表示初始狀態,而屬性始終表示當前狀態。

有關詳細說明,請參閱http://jquery-howto.blogspot.com/2011/06/html-difference-between-attribute-and.html

在GWT調用中,setAttribute在當前元素上調用本地javascript函數setAttribute。調用setProperty ...設置當前元素的屬性。

過去,這在大多數瀏覽器中都是一樣的,但隨着不斷髮展的標準的發展,這些標準開始發生變化。

我`噸真的知道瀏覽器實現之間的所有差異小,但跟蹤差一個可以依靠不同的DOM級別規格:http://www.w3.org/TR/DOM-Level-2-HTML/http://www.w3.org/TR/DOM-Level-3-Core/

而且Mozilla的文檔上的setAttribute是相當能與說明用於Firefox的區別:https://developer.mozilla.org/en/DOM/element.setAttribute

因此,在總結:如果您在GWT使用的setAttribute你依賴於瀏覽器的setAttribute實現這多少有些設置defualt值(對某些屬性,而不是更新的值),所以通常你想要setProperty ...

+0

+1用於研究。在GWT應用程序的上下文中,DOM *會改變,這仍然適用嗎? – 2011-12-21 14:25:39

+0

我已經更新了答案,以更好地適合gwt背景 – 2011-12-21 14:57:32