Jquery 什么时候最好使用'attr()'而不是'.prop()?

Jquery 什么时候最好使用'attr()'而不是'.prop()?,jquery,attr,prop,Jquery,Attr,Prop,(注意:虽然说这是一篇重复的文章很有诱惑力,但我不相信。这篇文章出色地解释了.prop()和.attr()之间的区别,但没有明确说明一个比另一个更可取,这正是这个问题的目的。) 尽管阅读了大量有关StackOverflow的问题/答案,其中涉及.prop()和.attr()之间的差异,但我仍然发现在这个问题上存在很多困惑 我认为,当一种方法优于另一种方法时,有一个明确的StackOverflow描述参考是有用的,这样我们就可以消除猜测,并尝试找出某个东西是属性还是属性 因此,我问,对于哪些属性/

(注意:虽然说这是一篇重复的文章很有诱惑力,但我不相信。这篇文章出色地解释了
.prop()
.attr()
之间的区别,但没有明确说明一个比另一个更可取,这正是这个问题的目的。)

尽管阅读了大量有关StackOverflow的问题/答案,其中涉及
.prop()
.attr()
之间的差异,但我仍然发现在这个问题上存在很多困惑

我认为,当一种方法优于另一种方法时,有一个明确的StackOverflow描述参考是有用的,这样我们就可以消除猜测,并尝试找出某个东西是属性还是属性

因此,我问,对于哪些属性/属性,最好使用
.prop()
,对于哪些属性/属性,
.attr()
适用于jQuery 1.9

下面是一些属性和属性的列表,以及获取或设置它们时通常应使用的方法。这是首选用法,但是
.attr()
方法在所有情况下都有效

+------------------------------------+------------+-----------+
| Attribute/Property                 |  .attr()   |  .prop()  |
+------------------------------------+------------+-----------+
| accesskey                          |    ✓       |           |
| align                              |    ✓       |           |
| async                              |            |    ✓      |
| autofocus                          |            |    ✓      |
| checked                            |            |    ✓      |
| class                              |    ✓       |           |
| contenteditable                    |    ✓       |           |
| disabled                           |            |    ✓      |
| draggable                          |    ✓       |           |
| href                               |    ✓       |           |
| id                                 |    ✓       |           |
| label                              |    ✓       |           |
| location (i.e., window.location)   |            |    ✓      |
| multiple                           |            |    ✓      |
| readOnly                           |            |    ✓      |
| rel                                |    ✓       |           |
| selected                           |            |    ✓      |
| src                                |    ✓       |           |
| tabindex                           |    ✓       |           |
| title                              |    ✓       |           |
| type                               |    ✓       |           |
| width (if needed over .width())    |    ✓       |           |
+------------------------------------+------------+-----------+
获取/设置值时不应使用
.attr()
.prop()
。请改用
.val()
方法(尽管使用
.attr(“value”,“somevalue”)
会起作用

摘要:布尔属性/属性和html中不存在的属性(如
window.location
)应使用
.prop()
方法。所有其他属性(您可以在html中看到的属性)都可以并且应该继续使用
.attr()
方法进行操作


在特定情况下,属性和属性之间的差异可能很重要。在jQuery 1.6之前,.attr()方法有时在检索某些属性时会考虑属性值,这可能会导致不一致的行为。从jQuery 1.6开始,.prop()方法方法提供了显式检索属性值的方法,而.attr()则检索属性

例如,应使用.prop()方法检索和设置selectedIndex、tagName、nodeName、nodeType、ownerDocument、defaultChecked和defaultSelected方法,但这不在attr的范围内。这些属性没有相应的属性,只是属性

关于布尔属性,考虑由HTML标记定义的DOM元素,并假定它是一个名为EELM:< /P>的JavaScript变量。 elem.checked true(布尔值)将随复选框状态而更改 $(elem).prop(“checked”)true(布尔值)将随复选框状态而更改

elem.getAttribute(“选中”)“选中”(字符串)复选框的初始状态;不更改 $(elem).attr(“已选中”)(1.6)“已选中”(字符串)复选框的初始状态;不会更改

$(elem).attr(“已选中”)(1.6.1+“已选中”(字符串)将随复选框状态而更改 $(elem).attr(“checked”)(1.6之前)true(布尔值)随复选框状态更改


在此处找到您的答案此处链接说明][1].[1]:@AzAh你没有读他打开问题的便条吗?@PalashMondal,是的,我在回答的末尾包含了jQuery引用的链接。重点是让引用可以在StackOverflow上轻松搜索。但是…其他问题怎么解释不了呢?最好使用
.attr()
当你想要属性时,以及
.prop
当你想要属性时。另一个问题很好地定义了这一点。@KevinB,但是尽管有那篇文章,我仍然看到很多困惑。对于我们很多人来说,尽管读过那篇文章,但并不总是清楚什么东西是属性或属性。这个问题/答案是受在回答另一个问题时进行了长时间的讨论。但是
.attr()
方法在所有情况下都有效。否@undefined,我引用的是jQuery文档。是的,只有jQuery 1.6.jQuery 1.6.1使.attr向后兼容(不是在1.6中),而1.9又回到了类似于1.6的设置,在该设置中向后兼容程度较低,这使得.attr不能与某些布尔属性一起正常工作。@KevinB,为了提供更好的答案,我将寻找更多参考资料。任何帮助都将不胜感激。(我认为这支持了我的观点,即这方面存在足够多的不确定性,因此在容易找到的地方清楚地说明答案是有用的。)