2011-12-21 14 views
8

Nie mogę określić różnicy między Element.setAttribute(String name, String value) i Element.setPropertyString(String name, String value). Czy istnieje różnica? Które ustawienie jest preferowane podczas próby ustawienia, powiedzmy, elementu zastępczego podczas wprowadzania tekstu? Robiłem getElement().setPropertyString("placeholder", "this is a placeholder"); i to działa, ale czy jest to odpowiedni sposób na zrobienie tego?GWT Element setAttribute vs setPropertyString

W documentation for DOM, setAttribute(Element, String, String) jest przestarzałe, mówiąc, że zamiast tego używa "im bardziej odpowiednio nazwanego setElementProperty(Element, String, String)." Czy to oznacza, że ​​należy używać metod o tej samej nazwie, co Element?

Odpowiedz

6

Problem polega na tym, że w IE6 i IE7 (i IE8 w trybach zgodności), setAttribute faktycznie ustawia właściwość (IE tak naprawdę nie robi różnicy; IE8 dodał opcjonalny argument do getAttribute, aby umożliwić pobranie atrybutu zdefiniowanego w specyfikacji DOM; patrz http://msdn.microsoft.com/en-us/library/ms536429v=vs.85.aspx).

BTW, twój odniesienie JavaDoc powinny być http://google-web-toolkit.googlecode.com/svn/javadoc/latest/index.html (nie jeden dla GWT 1.5, który jest mocno przestarzały) i należy użyć com.google.gwt.dom.client.Element zamiast com.google.gwt.user.client.DOM. Element ma setAttribute, który ustawia atrybut w każdej przeglądarce innej niż IE6/7 (lub podobne tryby IE8).

Jednak przez większość czasu powinieneś po prostu pracować z właściwościami DOM, a nie atrybutami. Na przykład chcesz uzyskać tab index jako liczbę, a nie ciąg znaków. I chcesz domyślną wartość/stan na nieruchomości w przypadku braku atrybutu, a nie null że trzeba by poradzić sobie (np input elementów domyślnie type=text gdy nie ma type atrybut; getAttribute("type") wróci null natomiast getPropertyString("type") będzie return "text").

+0

Według Javadoca w GWT 2.4, 'getAttribute'" Zwraca: Wartość Attr jako ciąg lub pusty ciąg znaków, jeśli atrybut nie ma określonej lub domyślnej wartości ", a nie wartość pusta, ale nie ma to wpływu na resztę odpowiedzi. +1 –

+0

Ponadto, w jaki sposób wpływa to na usuwanie właściwości/atrybutów? Na przykład istnieje 'removeAttribute()', ale nie ma 'removeProperty()'. Powiedz, że mam '' i chciałem usunąć ograniczenie 'max'. Jak to osiągnąć? –

+0

Ustaw ją na dowolną wartość, która usunęłaby ograniczenie, na przykład pusty łańcuch (możesz też użyć 'null'). Zobacz http://dev.w3.org/html5/spec/common-input-element-attributes.html#the-min-and-max-attributes i http://dev.w3.org/html5/spec/states -of-the-type-attribute.html # number-state-type-number –

6

Istnieje różnica między atrybutami i właściwościami. W skrócie atrybut reprezentuje stan początkowy, a właściwość zawsze reprezentuje bieżący stan.

Aby uzyskać szczegółowe objaśnienie, patrz: http://jquery-howto.blogspot.com/2011/06/html-difference-between-attribute-and.html.

W wywołaniu GWT setAttribute wywołuje natywną funkcję javascript setAttribute na bieżącym elemencie. Wywołanie setProperty ... ustawia właściwość bieżącego elementu.

W przeszłości w większości przeglądarek było to takie samo, ale przy zmieniających się standardach zaczęło to zmieniać się wcześniej.

I don `t naprawdę znać wszystkie małe różnice pomiędzy implementacjami przeglądarki, ale do śledzenia różnicę można było polegać na innym DOM Level Specyfikacja: dość http://www.w3.org/TR/DOM-Level-2-HTML/http://www.w3.org/TR/DOM-Level-3-Core/

także docs Mozilla są na setAttribute są może i podać różnicę dla firefox: https://developer.mozilla.org/en/DOM/element.setAttribute

Podsumowując: jeśli używasz setAttribute w GWT, polegasz na implementacji setAttribute przeglądarki, która nieco ustawia wartość defualt (dla niektórych właściwości i nie aktualizuje wartości), więc normalnie chcę ustawićProperty ...

+0

+1 za badania. Jednak w kontekście aplikacji GWT, gdzie DOM * nie * zmienia się, czy nadal obowiązuje? –

+0

Zaktualizowałem odpowiedź, aby lepiej pasowało do tła gwt. –