非自定义属性的attribute,如id,class等都有对应的property。html
自定义属性的attribute没有对应的property。 node
attribute不能从property中得到同步。数组
property能从attribute中得到同步。dom
更改property和attribute上的任意值,(除下列特殊状况)都会将更新反映到HTML页面中。函数
访问内置的HTML attributes,这些attribute不能从property同步过来。例如input标签的value 值。 3d
class 为JavaScript的保留关键字,经过property操做class时应使用 className。 cdn
对于一些和路径相关的属性,二者取得值也不尽相同,可是一样attribute取得是字面量,property取得是计算后的完整路径。 htm
attribute的checked、selected、disabled就是表示该属性初始状态的值。对象
property的checked、selected、disabled才表示该属性实时状态的值(值为true或false)。blog
对于值是true/false的property,attribute取得值是HTML文档字面量值,property是取得计算结果,property改变并不影响attribute字面量,但attribute改变会影响property计算。
node.getAttribute('someAttribute')获取的是attribute,而node.someAttribute获取的是元素的property
attr()函数针对的是该文档节点的attribut,是HTML标签上的特性。
prop()函数针对的是DOM元素自身的property,是DOM中的属性。
attr()设置的属性值只能是字符串类型。
prop()设置的属性值能够为包括数组和对象在内的任意类型。
attr()函数主要依赖的是Element对象的getAttribute() 和setAttribute() 两个方法。
prop()函数主要依赖的则是JS中原生的对象属性获取和设置方式。
尽可能使用prop()函数来设置或获取checked、selected、disabled等属性
能用prop(),就用prop()
参考文档: