вопрос заключается в том, использовать ли свойство или атрибут.
не нашел этого документально, поэтому выполнил несколько тестов (хром 12):
свойство <=> атрибут
accept, alt, formMethod, formTarget, id, name, placeholder, type, maxlength, size
form: method, name, target, action, enctype
- может установить либо свойство, либо атрибут
- будет отражать свойство или атрибут
- исключение 1: если свойство формы сначала будет искать элемент этогоимя (!)
- исключение 2: свойство действия перезаписывает себя, используя значение, передает установленное значение атрибуту
- исключение 3: enctype сохраняет свою целостность, но передает установленное значение атрибуту
свойство <= атрибут </strong>
value, autofocus, checked, disabled, formNoValidate, multiple, required
- параметр настройки не влияет на атрибут
- параметр настройки также устанавливает свойство
property => attribute
indeterminate
- Установочное свойство также устанавливает атрибут
- Установочный атрибут не влияет на свойство
пропетрия> <атрибут </strong>
defaultValue, validity, defaultChecked, readOnly
form: novalidate
- seСвойство или атрибут tting не влияют на другие
мне это кажется довольно случайным поведением.
учитывая случайный атрибут / значение для применения к элементу, вот лучшие правила, которые я придумал (изменено согласно Тиму Дауну (спасибо!) ниже):
если класс, напишите classList
, прочитайте className
свойство
если форма, всегда прочитайте используя атрибут (и будьте немного осторожнее)
, если typeof element[propName] != "undefined"
, используйте свойство, т. е. element[attr]=val
в противном случае используйте атрибутто есть element.setAttribute(attr,val)
это даже близко к правде?
примечание: интересно, если у вас есть форма с элементом с именем "novalidate",возможно ли получить доступ к свойству novalidate
самой формы?