prop函数是在JQuery 1.6 Release时加入的,主要目的是使attributes和properties的概念区分开来。
DOM对象大部分的property都有对应的attribute,名字也基本一样(也有例外,如“class”这个attribute对应的property名字为“className”),这些property也和其对应的attribute保持一样的状态或值。但一些Boolean类型的属性(如checked, selected, disabled等)有些特殊,其attribute只保留初始值(默认值), property才是当前最新的状态或值。如一个默认勾选的checkbox,当你在页面去除勾选的时候,checked这个property已由true变为false,而checked这个attribute仍然保持“checked”这个初始值。由此可见attribute和property完全不是同一个东西,但“通用”的attr方法似乎在某种程度上模糊了这个区别。
而JQuery为了向后兼容,在1.6.1中又使attr恢复了以前的功能,因此$("#foo").attr("checked",true)也是没问题的,但更推荐$("#foo").prop("checked",true),这样的好处是概念上更清楚,性能相比也得到部分提升(请参考John Resig自己的解释:jQuery 1.6 and .attr())。
.prop()方法应该被用来处理boolean attributes/properties以及在html(比如:window.location)中不存在的properties。其他所有的attributes可以而且应该继续使用.attr()方法来进行操作。
使用prop方法获取属性则统一返回true和false,使用attr,如checked='checked'时,为true,没有选中时,则为undefined大多数情况下,原先attr能正常工作,不会对attr有什么大影响
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(3)
prop函数是在JQuery 1.6 Release时加入的,主要目的是使attributes和properties的概念区分开来。
DOM对象大部分的property都有对应的attribute,名字也基本一样(也有例外,如“class”这个attribute对应的property名字为“className”),这些property也和其对应的attribute保持一样的状态或值。但一些Boolean类型的属性(如checked, selected, disabled等)有些特殊,其attribute只保留初始值(默认值), property才是当前最新的状态或值。如一个默认勾选的checkbox,当你在页面去除勾选的时候,checked这个property已由true变为false,而checked这个attribute仍然保持“checked”这个初始值。由此可见attribute和property完全不是同一个东西,但“通用”的attr方法似乎在某种程度上模糊了这个区别。
而JQuery为了向后兼容,在1.6.1中又使attr恢复了以前的功能,因此$("#foo").attr("checked",true)也是没问题的,但更推荐$("#foo").prop("checked",true),这样的好处是概念上更清楚,性能相比也得到部分提升(请参考John Resig自己的解释:jQuery 1.6 and .attr())。
.prop()方法应该被用来处理boolean attributes/properties以及在html(比如:window.location)中不存在的properties。其他所有的attributes可以而且应该继续使用.attr()方法来进行操作。
使用prop方法获取属性则统一返回true和false,使用attr,如checked='checked'时,为true,没有选中时,则为undefined
大多数情况下,原先attr能正常工作,不会对attr有什么大影响