Ao escrever o código-fonte HTML, você pode definir atributos nos seus elementos HTML. Então, uma vez que o navegador analise seu código, um nó DOM correspondente será criado. Este nó é um objeto e, portanto, possui propriedades .
Por exemplo, este elemento HTML:
<input type="text" value="Name:">
possui 2 atributos ( type
e value
).
Depois que o navegador analisa esse código, um objeto HTMLInputElement será criado e esse objeto conterá dezenas de propriedades como: accept, accessKey, align, alt, atributos, autofoco, baseURI, verificado, childElementCount, childNodes, children, classList, className, clientHeight, etc.
Para um determinado objeto do nó DOM, propriedades são as propriedades desse objeto e atributos são os elementos da attributes
propriedade desse objeto.
Quando um nó DOM é criado para um determinado elemento HTML, muitas de suas propriedades se relacionam a atributos com nomes iguais ou semelhantes, mas não é um relacionamento individual. Por exemplo, para este elemento HTML:
<input id="the-input" type="text" value="Name:">
o nó DOM correspondente terá id
, type
e value
propriedades (entre outras):
A id
propriedade é uma propriedade refletida para o id
atributo: Obter a propriedade lê o valor do atributo e definir a propriedade grava o valor do atributo. id
é uma propriedade refletida pura , não modifica ou limita o valor.
A type
propriedade é uma propriedade refletida para o type
atributo: Obter a propriedade lê o valor do atributo e definir a propriedade grava o valor do atributo. type
não é uma propriedade refletida pura porque está limitada a valores conhecidos (por exemplo, os tipos válidos de uma entrada). Se você tivesse <input type="foo">
, então theInput.getAttribute("type")
te dá, "foo"
mas theInput.type
te dá "text"
.
Por outro lado, a value
propriedade não reflete o value
atributo. Em vez disso, é o valor atual da entrada. Quando o usuário altera manualmente o valor da caixa de entrada, a value
propriedade refletirá essa alteração. Portanto, se o usuário "John"
inserir na caixa de entrada, então:
theInput.value // returns "John"
enquanto que:
theInput.getAttribute('value') // returns "Name:"
A value
propriedade reflete o conteúdo de texto atual dentro da caixa de entrada, enquanto o value
atributo contém o conteúdo de texto inicial do value
atributo no código-fonte HTML.
Portanto, se você quiser saber o que está atualmente dentro da caixa de texto, leia a propriedade Se você, no entanto, deseja saber qual era o valor inicial da caixa de texto, leia o atributo Ou você pode usar a defaultValue
propriedade, que é um reflexo puro do value
atributo:
theInput.value // returns "John"
theInput.getAttribute('value') // returns "Name:"
theInput.defaultValue // returns "Name:"
Existem várias propriedades que refletem diretamente seu atributo ( rel
, id
), alguns são reflexos diretos com nomes ligeiramente diferentes ( htmlFor
reflete o for
atributo, className
reflete o class
atributo), muitos que refletem seu atributo, mas com restrições / modificações ( src
, href
, disabled
, multiple
), e assim por em. A especificação abrange os vários tipos de reflexão.