.prop() vs .attr()
.prop() vs .attr()
技术背景
在jQuery 1.6之前,attr()方法在获取某些属性时有时会考虑属性值,这导致了相当不一致的行为。为了解决这个问题,jQuery 1.6引入了prop()方法,它提供了一种显式检索属性值的方式,而.attr()则用于检索属性。理解prop()和attr()的区别对于正确处理HTML属性和DOM属性至关重要。
实现步骤
理解HTML属性和DOM属性
- HTML属性:存在于HTML文本文件中,用于为标记关联数据,例如事件、渲染等。属性以字符串形式返回,不同浏览器可能存在不一致性。例如:
1 | |
可以通过以下代码访问属性:
1 | |
- DOM属性:属于元素节点的属性,只能通过JavaScript访问。例如:
1 | |
区分.prop()和.attr()的使用场景
- 大部分情况使用
.prop():属性通常比属性更容易处理,属性值可以是任何类型,而属性值只能是字符串。例如,checked属性是布尔值,style属性是一个对象。 - 特定情况使用
.attr():当没有与之相关的属性(自定义属性),或者知道该特定属性与属性不是1:1对应时,使用.attr()。例如,获取自定义的data-xyz属性。
示例演示
1 | |
1 | |
核心代码
检查属性和属性值
1 | |
比较.attr()和.prop()
1 | |
检查复选框状态
1 | |
最佳实践
- 优先使用
.prop():在大多数情况下,使用.prop()来处理属性,因为它更直接地影响有效属性,而不是依赖于修改HTML的复杂副作用。 - 使用
.attr()处理自定义属性:当需要获取自定义HTML属性或与DOM属性不同步的HTML属性时,使用.attr()。 - 避免混合使用:在整个应用程序中,不要为同一属性混合使用
.attr()和.prop()。
常见问题
1. .attr()和.prop()返回值类型不同
.attr()总是返回字符串,而.prop()可以返回任何类型,如字符串、整数、布尔值等。
2. 性能差异
.prop()据说比.attr()快约2.5倍。
3. 复选框状态问题
使用.attr('checked')可能无法正确反映复选框的当前状态,而.prop('checked')可以。
4. CSS选择器问题
.attr()可以影响所有属性选择器,而.prop()只影响少数属性选择器。
.prop() vs .attr()
https://119291.xyz/posts/prop-vs-attr/