Элемент GWT setAttribute vs setPropertyString - PullRequest
8 голосов
/ 21 декабря 2011

Я не могу определить разницу между Element.setAttribute(String name, String value) и Element.setPropertyString(String name, String value).Есть ли разница?Что предпочтительнее при попытке установить, скажем, заполнитель для ввода текста?Я делал getElement().setPropertyString("placeholder", "this is a placeholder");, и это работает, но это подходящий способ сделать это?

В документации для DOM , setAttribute(Element, String, String) устарело, говоря, что вместо него следует использовать «более подходящее имя setElementProperty(Element, String, String)».Означает ли это, что следует использовать одноименные методы Element?

Ответы [ 2 ]

6 голосов
/ 21 декабря 2011

Проблема в том, что в IE6 и IE7 (и IE8 в режимах совместимости) setAttribute фактически устанавливает свойство (IE на самом деле ничего не меняет; IE8 добавил необязательный аргумент для getAttribute, чтобы разрешить получение атрибута как определено в спецификации DOM; см. http://msdn.microsoft.com/en-us/library/ms536429v=vs.85.aspx).

Кстати, ваша ссылка на 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").

6 голосов
/ 21 декабря 2011

Существует разница между атрибутами и свойствами.Короче говоря, атрибут представляет начальное состояние, а свойство всегда представляет текущее состояние.

См. http://jquery -howto.blogspot.com / 2011/06 / html-разность между атрибутом и.html для подробного объяснения.

При вызове GWT setAttribute вызывает встроенную функцию javascript setAttribute для текущего элемента.Вызов setProperty ... установить свойство для текущего элемента.

Раньше в большинстве браузеров это было то же самое, но с развитием стандартов это начало меняться назад.

Iна самом деле не знаю всех небольших различий между реализациями браузера, но чтобы отследить разницу, можно полагаться на разные спецификации уровня 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

Итак, подведем итог: если вы используете setAttribute в GWT, вы полагаетесь на реализацию браузера setAttribute, которая в некоторой степени устанавливает значение по умолчанию (для определенных свойств, а не дляобновление значения), поэтому обычно требуется setProperty ...

...