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 ( typee 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 attributespropriedade 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, typee valuepropriedades (entre outras):
A idpropriedade é uma propriedade refletida para o idatributo: 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 typepropriedade é uma propriedade refletida para o typeatributo: Obter a propriedade lê o valor do atributo e definir a propriedade grava o valor do atributo. typenã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.typete dá "text".
Por outro lado, a valuepropriedade não reflete o valueatributo. Em vez disso, é o valor atual da entrada. Quando o usuário altera manualmente o valor da caixa de entrada, a valuepropriedade 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 valuepropriedade reflete o conteúdo de texto atual dentro da caixa de entrada, enquanto o valueatributo contém o conteúdo de texto inicial do valueatributo 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 defaultValuepropriedade, que é um reflexo puro do valueatributo:
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 ( htmlForreflete o foratributo, classNamereflete o classatributo), 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.