fe-interview icon indicating copy to clipboard operation
fe-interview copied to clipboard

[js] 第159天 在js中attribute和property的区别是什么?

Open haizhilin2013 opened this issue 5 years ago • 10 comments

第159天 在js中attribute和property的区别是什么?

haizhilin2013 avatar Sep 21 '19 20:09 haizhilin2013

attribute 是标签对应的属性列表,一般是type id class等。 自定义的属性和值也会在attributes 中。 property 是dom的默认属性列表

LinStan avatar Sep 22 '19 12:09 LinStan

  • attribute

    • 元素在HTML中的键值对
    • attribute 会始终保持 html 代码中的初始值(除了href)
  • property

    • attribute在对应的JS DOM节点上的对象属性
    • Property是有可能变化的(跟随用户操作).
  • 其他补充

    • 有一些特殊的 attribute, 它们对应的 Property 名称会发生改变
      • for (attr) => htmlFor (prop)
      • class (attr) => className (prop)
    • 以下图来自@justjavac (https://zhuanlan.zhihu.com/p/70671215) image

vkboo avatar Sep 22 '19 14:09 vkboo

@vkboo 链接多了一半括号 https://zhuanlan.zhihu.com/p/70671215

justjavac avatar Sep 23 '19 00:09 justjavac

@justjavac 的最后一项, 更新 value 时,属性和特性的更新是什么样的呀

forever-z-133 avatar Sep 23 '19 02:09 forever-z-133

@vkboo 链接多了一半括号 https://zhuanlan.zhihu.com/p/70671215

@justjavac 在理解的基础上,用一句话概括:浏览器解析之前全都是特性,解析之后分情况:标准特性的值将被解析并挂载到 DOM属性上,非标准特性只可用DOM的 getAttribute 等方法取值。

这样说应该问题不大吧?

wqcstrong avatar Sep 23 '19 04:09 wqcstrong

@foreverZ133 非标准的不做任何映射,只能通过 getAttribute 等函数获取到值,值是字符串类型。

justjavac avatar Sep 23 '19 04:09 justjavac

@foreverZ133 非标准的不做任何映射,只能通过 getAttribute 等函数获取到值,值是字符串类型。

噢,一个会改变 html 一个不会,突然冒出来个特性搞蒙了,Thanks

forever-z-133 avatar Sep 23 '19 09:09 forever-z-133

1、property和attributies都是properties的子集,而每个attribute是attributies的子集; 2、attribute可以理解为特性,可以自定义,直接在html标签上添加的和使用setAttribute添加的情况一致,即html标签添加的都是attribute属性, property则是使用xx.属性进行更改,通常来讲,更改互相影响(value除外) 3、当添加新的非默认属性时,是不互通的; 4、一些特殊属性,则需要特殊对待。

property能够从attribute中得到同步; attribute不会同步property上的值; attribute和property之间的数据绑定是单向的,attribute->property; 更改property和attribute上的任意值,都会将更新反映到HTML页面中;

zhaofeipeter avatar Jul 30 '20 03:07 zhaofeipeter

property是DOM中的属性,DOM是JavaScript里的对象; attribute是HTML标签上的特性,它的值只能够是字符串;

bozaigao avatar Dec 02 '20 03:12 bozaigao

attribute是特性,一般是用于自定义特性,例:data-xx=“xxx” 可以使用getAttribute('data-xx')获取,且只能是字符串。 property是属性,是dom元素中的属性,例如dom.innerHTML会改变dom本身。

xiaoqiangz avatar Jul 27 '22 08:07 xiaoqiangz