проблема заключается в том, следует ли использовать свойство или атрибут.
не нашли это документированным, поэтому запустили некоторые тесты (хром 12):
свойство <= > Атрибут
accept, alt, formMethod, formTarget, id, name, placeholder, type, maxlength, size form: method, name, target, action, enctype
- может установить либо свойство, либо атрибут
- будет отражать свойство или атрибут
- exception 1: если свойство form сначала ищет элемент этого имени (!)
- exception 2: свойство action переписывает себя с использованием значения, передает значение set атрибуту
- exception 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
самой формы?