attributes与property的区别

491 阅读1分钟

attribute: 特性

属于 html

attributes 是 HTML元素(标签)的属性。

只能是字符串,大小写不敏感

property: 属性

属于 js

property 是 DOM 对象的属性。

property的值可以是任何的数据类型,对大小写敏感

关系

property 是 attribute 对应的 DOM 节点的 对象属性 (Object field)

property是实时更新的

通常来讲,更改互相影响(value除外)

当添加新的非默认属性时,是不互通的;

一些特殊属性,则需要特殊对待(hidden,disable等)

1、attribute的hidden属性会影响property属性的hidden;

2、只要attribute的hidden不为null(当在html标签中写hidden 或者 hidden=xxx,property最终都会编译为true);

3、当使用removeAttribute函数移除hidden的时候,attribute才为null,input才会显示;

4、当property的hidden设为false的时候,attribute也会为null

Attribute or Property 可以自定义吗?

先说结论: attribute 可以 property 不行

我们可以尝试在 html 中自定义 attribute:

<input value="customInput" customeAttr="custome attribute value" />
复制代码

然后我们尝试获取自定义的属性:

input.getAttribute('customAttr') // custome attribute value
input.customAttr // undefined
复制代码

可以看到, 我们能够成功的获取自定义的 attribute, 但是无法获取 property.

其实不难理解, DOM 节点在初始化的时候会将html 规范中定义的 attribute 赋值到 property 上, 而自定义的 attribute 并不属于这个氛围内, 自然生成的 DOM 节点就没有这个 property.

一些补充

需要注意, 有一些特殊的 attribute, 它们对应的 Property 名称会发生改变, 比如:

  • for (attr) => htmlFor (prop)
  • class (attr) => className (prop) 等...

部分代码来自: juejin.cn/post/684490… blog.csdn.net/zhy13087344…