GWT元素setAttribute与setPropertyString

时间:2011-12-21 13:08:56

标签: java gwt dom element

我无法确定Element.setAttribute(String name, String value)Element.setPropertyString(String name, String value)之间的区别。有区别吗?尝试在文本输入上设置占位符时,首选哪个?我一直在做getElement().setPropertyString("placeholder", "this is a placeholder");并且它有效,但这是适当的方法吗?

documentation for DOM中,不推荐使用setAttribute(Element, String, String),而是使用“名称更恰当的setElementProperty(Element, String, String)”。这是否意味着应该使用类似命名的Element

方法

2 个答案:

答案 0 :(得分: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/

此外,关于setAttribute的Mozilla文档非常可以并且说明firefox的区别:https://developer.mozilla.org/en/DOM/element.setAttribute

总结一下:如果你在GWT中使用setAttribute你依赖于浏览器setAttribute实现,它有点设置defualt值(在某些属性上,而不是更新值),所以通常你想要setProperty ......

答案 1 :(得分: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")会返回null,而getPropertyString("type")会返回"text"