问题是是否使用属性或属性。
没有发现这个记录,所以进行了一些测试(铬12):
属性< =>属性
accept, alt, formMethod, formTarget, id, name, placeholder, type, maxlength, size form: method, name, target, action, enctype
属性< =属性
value, autofocus, checked, disabled, formNoValidate, multiple, required
property =>属性
indeterminate
propetry><属性
defaultValue, validity, defaultChecked, readOnly form: novalidate
<小时/> 对我而言,这似乎是非常随意的行为。
给出一个随机属性/值来应用于一个元素,这里是我提出的最好的规则(根据Tim Down(谢谢!)修改):
如果是类,则使用classList
进行写入,使用className
属性进行阅读
如果表单总是使用属性读取(并且要小心)
如果typeof element[propName] != "undefined"
,请使用属性,即element[attr]=val
否则,请使用属性,即element.setAttribute(attr,val)
这是否接近正确?
注意:有趣的是,如果您的表单中包含名为“novalidate”的元素,是否可以访问表单本身的novalidate
属性?
答案 0 :(得分:8)
除了下面列出的罕见特殊情况外,请始终使用该属性。一旦浏览器解析了初始HTML,除非由于某种原因将DOM序列化为HTML,否则属性对您没有帮助。
始终青睐物业的理由:
checked
之类的布尔属性:只使用true
和false
,从不担心是应该删除属性,还是将其设置为{{ 1}}或""
)"checked"
属性与任何属性都不对应; checked
属性对应于checked
属性,并且在用户与元素交互时不会更改(旧IE中除外;请参阅下一点)。同样地defaultChecked
和value
。defaultValue
和setAttribute()
为broken in older versions of IE。特殊情况:
getAttribute()
元素的属性。由于每个表单输入都映射到与其<form>
对应的父<form>
元素的属性,因此使用name
和setAttribute()
获取表单属性更安全,例如getAttribute()
,action
和name
。method
。这些通常不会在DOM元素对象上创建等效属性,因此应使用<p myspecialinfo="cabbage">
和setAttribute()
。最后一个考虑因素是属性和属性名称之间没有确切的对应关系。例如,getAttribute()
属性的等效属性为class
,className
属性的属性为for
。