При написании исходного кода HTML вы можете определить атрибуты ваших элементов HTML. Затем, как только браузер проанализирует ваш код, будет создан соответствующий узел DOM. Этот узел является объектом, и поэтому у него есть свойства .
Например, этот элемент HTML:
<input type="text" value="Name:">
имеет 2 атрибута ( type
и value
).
После того, как браузер проанализирует этот код, будет создан объект HTMLInputElement , и этот объект будет содержать десятки свойств, таких как: accept, accessKey, align, alt, атрибуты, автофокус, baseURI, флажок, childElementCount, childNodes, children, classList, className, высота клиента и т. д.
Для данного объекта узла DOM свойства - это свойства этого объекта, а атрибуты - это элементы attributes
свойства этого объекта.
Когда узел DOM создается для данного элемента HTML, многие его свойства относятся к атрибутам с одинаковыми или похожими именами, но это не отношение один к одному. Например, для этого элемента HTML:
<input id="the-input" type="text" value="Name:">
соответствующий DOM - узел будет иметь id
, type
и value
свойство (среди прочих):
id
Свойство отражено свойство для id
атрибута: Получение свойства считывает значение атрибута, и установив свойство записывает значение атрибута. id
является чисто отраженным свойством, оно не изменяет и не ограничивает значение.
type
Свойство отражено свойство для type
атрибута: Получение свойства считывает значение атрибута, и установив свойство записывает значение атрибута. type
не является чисто отраженным свойством, потому что оно ограничено известными значениями (например, допустимыми типами ввода). Если у вас есть <input type="foo">
, то theInput.getAttribute("type")
дает вам, "foo"
но theInput.type
дает вам "text"
.
В отличие от этого value
свойство не отражает value
атрибут. Вместо этого это текущее значение ввода. Когда пользователь вручную изменяет значение поля ввода, value
свойство будет отражать это изменение. Так что, если пользователь вводит данные "John"
в поле ввода, то:
theInput.value // returns "John"
в то время как:
theInput.getAttribute('value') // returns "Name:"
value
Свойство отражает текущее текстовое содержимое внутри-поле ввода, в то время как value
атрибут содержит начальный текст-содержимое value
атрибута из исходного HTML - кода.
Поэтому, если вы хотите узнать, что в данный момент находится внутри текстового поля, прочитайте свойство. Если вы, однако, хотите знать, каково было начальное значение текстового поля, прочитайте атрибут. Или вы можете использовать defaultValue
свойство, которое является чистым отражением value
атрибута:
theInput.value // returns "John"
theInput.getAttribute('value') // returns "Name:"
theInput.defaultValue // returns "Name:"
Есть несколько свойств , которые непосредственно отражают их атрибут ( rel
, id
), некоторые из них прямые отражений с слегка разными именами ( htmlFor
отражает for
атрибут, className
отражает class
атрибут), многие из которых отражают их атрибут , но с ограничениями / модификациями ( src
, href
, disabled
, multiple
), и т.д. на. Спецификация охватывает различные виды отражения.