property和attribute都有属性的意思,但是这两个却有点不同。
他们的值有时候是一样的,有时候又不一样。具体要看这个属性属于什么情况。
分为 布尔值属性 和 非布尔值属性两个 情况
1.非布尔值属性
- 不管什么情况 property和attribute都会同步
2.布尔值属性
- 改变property,不会同步 attribute
- 当没有设定property时,改变attribute,property会跟着同步
- 如果设定过 property,改变attribute,property不会跟着同步
尽管两个都有属性的意思,但是
1.浏览器只认property:
我个人理解,根据上面改变property,不会同步 attribute 这一特点,就能反向推出出,假设一开始 property、attribute的值都没有,那么如果设定了property,attribute 不会被同步,那么attribute 还是没有值。对比一看property的值可能更加重要一点。。。
2.用户操作的也是property
因为浏览器认的、用户操作的都是property,那么当布尔值属性时,一旦改变了attribute,property会先跟着同步(没有设定property时),然后不管怎么改attribute,property都不会变。所以,
操作布尔值属性时,用prop()
但是
操作非布尔值属性时,用attr()
说是用attr()成本低