2011-12-21 65 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