javascript dom, как обрабатывать «особые свойства» в сравнении с атрибутами?

Проблема в том, использовать ли свойство или атрибут.

не нашли это задокументированным, поэтому выполнили несколько тестов (хром 12):

свойство <=> атрибут

accept, alt, formMethod, formTarget, id, name, placeholder, type, maxlength, size
form: method, name, target, action, enctype
  • может установить либо свойство, либо атрибут
  • будет отражать свойство или атрибут
  • исключение 1: если свойство form сначала будет искать элемент с таким именем (!)
  • исключение 2: свойство action перезаписывается с использованием значения, передает установленное значение атрибуту
  • исключение 3: enctype сохраняет свою целостность, но передает установленное значение атрибуту

] свойство <= attribute

value, autofocus, checked, disabled, formNoValidate, multiple, required
  • установка свойства не влияет на атрибут
  • установка атрибута также устанавливает свойство

свойство => атрибут

indeterminate
  • установка свойства также устанавливает атрибут
  • установка атрибута не влияет на свойство

propetry>

defaultValue, validity, defaultChecked, readOnly
form: novalidate
  • установка свойства или атрибута не влияет на другие


. Мне это кажется довольно случайным поведением.

задан случайный атрибут / значение для применения к элементу, вот лучшие правила, которые я придумал (измененные согласно Тиму Дауну (спасибо!) Ниже):

  • если класс, напишите с помощью classList , читать с помощью className свойство

  • , если форма, всегда читать с использованием атрибута (и будьте осторожны)

  • if typeof element [propName] ! = "undefined" , используйте свойство, то есть element [attr] = val

  • , в противном случае используйте атрибут, то есть element.setAttribute (attr, val)

это даже близко к правде?

примечание: интересно, если у вас есть форма с элементом с именем «novalidate», возможно ли вообще получить доступ к свойству novalidate самой формы?

11
задан Stephan Muller 22 September 2014 в 11:45
поделиться