我无法确定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
?
答案 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.DOM
。 Element
有一个setAttribute
,用于在IE6 / 7以外的每个浏览器中设置属性(或IE8的类似模式)。
但大部分时间,您应该只使用DOM属性而不是属性。例如,您希望将tab index
作为数字,而不是字符串。并且您希望在没有属性的情况下属性的默认值/状态,而不是您必须自己处理的null
(例如,当input
元素默认为type=text
时没有type
属性; getAttribute("type")
会返回null
,而getPropertyString("type")
会返回"text"
。