jQuery-如何理解jQuery中的prop函数?对之前使用attr的代码有何影响?如何规避负面影响?

WP主题讨论 WP主题讨论 主题:1013 回复:2239

jQuery-如何理解jQuery中的prop函数?对之前使用attr的代码有何影响?如何规避负面影响?

偏爱自由 发布于 2017-01-10 字数 0 浏览 1101 回复 3

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(3

瑾兮 2017-08-23 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())。

归属感 2017-05-27 2 楼

.prop()方法应该被用来处理boolean attributes/properties以及在html(比如:window.location)中不存在的properties。其他所有的attributes可以而且应该继续使用.attr()方法来进行操作。

浮生未歇 2017-03-08 1 楼

使用prop方法获取属性则统一返回true和false,使用attr,如checked='checked'时,为true,没有选中时,则为undefined
大多数情况下,原先attr能正常工作,不会对attr有什么大影响