jquery中attr和prop的区别

今天做个购物车遇到了一个小小的问题

1
console.log($('#all').attr('checked'))

居然提示undefied

查了资料后 才发现 需要改为

1
console.log($('#all').prop('checked'))

那么问题来,什么时候该用prop?什么时候用attr?它们两个之间有什么区别?

关于它们两个的区别,网上的答案很多。这里谈谈我的心得,我的心得很简单:

对于HTML元素本身就带有的固有属性,在处理时,使用prop方法。
对于HTML元素我们自己自定义的DOM属性,在处理时,使用attr方法。

举个小栗子

1
2
<input id="chk1" type="checkbox" index="1" />是否可见
<input id="chk2" type="checkbox" checked="checked" index="2"/>是否可见

像checkbox,radio和select这样的元素,选中属性对应“checked”和“selected”,这些也属于固有属性,因此需要使用prop方法去操作才能获得正确的结果。

1
2
$("#chk1").prop("checked") == false
$("#chk2").prop("checked") == true

如果上面使用attr方法,则会出现:

1
2
$("#chk1").attr("checked") == undefined
$("#chk2").attr("checked") == "checked"

而栗子中的index属性是我们自己自定义上去的,<input>元素本身是没有这个属性的。这种就是自定义的DOM属性。处理这些属性时,建议使用attr方法。使用prop方法取值和设置属性值时,都会返回undefined值。

热评文章