Podczas pisania kodu źródłowego HTML możesz definiować atrybuty elementów HTML. Następnie, gdy przeglądarka przeanalizuje kod, zostanie utworzony odpowiedni węzeł DOM. Ten węzeł jest obiektem, a zatem ma właściwości .
Na przykład ten element HTML:
<input type="text" value="Name:">
ma 2 atrybuty ( type
i value
).
Gdy przeglądarka przeanalizuje ten kod, zostanie utworzony obiekt HTMLInputElement , który będzie zawierał dziesiątki właściwości, takich jak: accept, accessKey, align, alt, atrybuty, autofocus, baseURI, zaznaczone, childElementCount, childNodes, child, classList, className, clientHeight itp.
Dla danego obiektu węzła DOM właściwości są właściwościami tego obiektu, a atrybuty są elementami attributes
właściwości tego obiektu.
Kiedy węzeł DOM jest tworzony dla danego elementu HTML, wiele jego właściwości odnosi się do atrybutów o takich samych lub podobnych nazwach, ale nie jest to relacja jeden do jednego. Na przykład dla tego elementu HTML:
<input id="the-input" type="text" value="Name:">
DOM odpowiedni węzeł będzie mieć id
, type
i value
właściwości (między innymi):
id
Nieruchomość jest odzwierciedlone nieruchomość dla id
atrybutu: Pierwsze właściwość odczytuje wartość atrybutu, a ustawienie właściwości zapisuje wartość atrybutu. id
jest czysto odzwierciedloną właściwością, nie modyfikuje ani nie ogranicza wartości.
type
Nieruchomość jest odzwierciedlone nieruchomość dla type
atrybutu: Pierwsze właściwość odczytuje wartość atrybutu, a ustawienie właściwości zapisuje wartość atrybutu. type
nie jest czystą odzwierciedloną właściwością, ponieważ ogranicza się do znanych wartości (np. prawidłowych typów danych wejściowych). Jeśli tak <input type="foo">
, to theInput.getAttribute("type")
daje, "foo"
ale theInput.type
daje "text"
.
Natomiast value
właściwość nie odzwierciedla value
atrybutu. Zamiast tego jest to bieżąca wartość wejścia. Gdy użytkownik ręcznie zmieni wartość pola wprowadzania, value
właściwość odzwierciedli tę zmianę. Jeśli więc użytkownik wprowadzi dane "John"
w polu wprowadzania, wówczas:
theInput.value // returns "John"
natomiast:
theInput.getAttribute('value') // returns "Name:"
value
Nieruchomość odzwierciedla aktualny tekst-zawartość wewnątrz pola wejściowego, natomiast value
atrybut zawiera początkowy tekst-zawartość value
atrybutu z kodu źródłowego HTML.
Więc jeśli chcesz wiedzieć, co aktualnie znajduje się w polu tekstowym, przeczytaj właściwość. Jeśli jednak chcesz wiedzieć, jaka była początkowa wartość pola tekstowego, przeczytaj atrybut. Lub możesz użyć defaultValue
właściwości, która jest czystym odzwierciedleniem value
atrybutu:
theInput.value // returns "John"
theInput.getAttribute('value') // returns "Name:"
theInput.defaultValue // returns "Name:"
Istnieje kilka właściwości, które bezpośrednio odzwierciedlają ich atrybut ( rel
, id
), niektóre są bezpośrednimi odbicia z nieznacznie różnymi nazwami ( htmlFor
odzwierciedla for
cechę, className
odzwierciedla class
atrybut), wielu, które odzwierciedlają ich atrybut ale z ograniczeniami / modyfikacjami ( src
, href
, disabled
, multiple
), a więc na. Specyfikacja obejmuje różne rodzaje odbić.