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 ( typei 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 attributeswł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, typei valuewłaściwości (między innymi):
idNieruchomość jest odzwierciedlone nieruchomość dla idatrybutu: Pierwsze właściwość odczytuje wartość atrybutu, a ustawienie właściwości zapisuje wartość atrybutu. idjest czysto odzwierciedloną właściwością, nie modyfikuje ani nie ogranicza wartości.
typeNieruchomość jest odzwierciedlone nieruchomość dla typeatrybutu: Pierwsze właściwość odczytuje wartość atrybutu, a ustawienie właściwości zapisuje wartość atrybutu. typenie 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.typedaje "text".
Natomiast valuewłaściwość nie odzwierciedla valueatrybutu. Zamiast tego jest to bieżąca wartość wejścia. Gdy użytkownik ręcznie zmieni wartość pola wprowadzania, valuewł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:"
valueNieruchomość odzwierciedla aktualny tekst-zawartość wewnątrz pola wejściowego, natomiast valueatrybut zawiera początkowy tekst-zawartość valueatrybutu 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ć defaultValuewłaściwości, która jest czystym odzwierciedleniem valueatrybutu:
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 ( htmlForodzwierciedla forcechę, classNameodzwierciedla classatrybut), wielu, które odzwierciedlają ich atrybut ale z ograniczeniami / modyfikacjami ( src, href, disabled, multiple), a więc na. Specyfikacja obejmuje różne rodzaje odbić.