javascript dom,如何处理“特殊属性”与属性?

时间:2011-08-10 05:23:10

标签: javascript dom code-generation

问题是是否使用属性或属性。

没有发现这个记录,所以进行了一些测试(铬12):

属性< =>属性

accept, alt, formMethod, formTarget, id, name, placeholder, type, maxlength, size
form: method, name, target, action, enctype
  • 可以设置属性或属性
  • 将反映属性或属性
  • 例外1:如果表单属性首先查找该名称的元素(!)
  • 异常2:action属性使用value重写自身,将set value传递给属性
  • 例外3: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属性?

1 个答案:

答案 0 :(得分:8)

除了下面列出的罕见特殊情况外,请始终使用该属性。一旦浏览器解析了初始HTML,除非由于某种原因将DOM序列化为HTML,否则属性对您没有帮助。

始终青睐物业的理由:

  • 处理属性更简单(请参阅checked之类的布尔属性:只使用truefalse,从不担心是应该删除属性,还是将其设置为{{ 1}}或""
  • 并非每个属性都映射到同名属性。例如,复选框或单选按钮的"checked"属性与任何属性都不对应; checked属性对应于checked属性,并且在用户与元素交互时不会更改(旧IE中除外;请参阅下一点)。同样地defaultCheckedvalue
  • defaultValuesetAttribute()broken in older versions of IE

特殊情况:

  • getAttribute()元素的属性。由于每个表单输入都映射到与其<form>对应的父<form>元素的属性,因此使用namesetAttribute()获取表单属性更安全,例如getAttribute()actionname
  • 自定义属性,例如method。这些通常不会在DOM元素对象上创建等效属性,因此应使用<p myspecialinfo="cabbage">setAttribute()

最后一个考虑因素是属性和属性名称之间没有确切的对应关系。例如,getAttribute()属性的等效属性为classclassName属性的属性为for