-1

注意:虽然说这是.prop() 与 .attr()的副本可能很诱人,但我不相信它是。那篇文章很好地解释了和之间的区别.prop().attr()但没有明确说明何时比另一个更可取,这就是这个问题的目的。)

.prop()尽管在 StackOverflow 上阅读了许多关于和之间差异的问题/答案.attr(),但我仍然在这个问题上看到了很多困惑。

我觉得在 StackOverflow 上有一个明确的参考来描述什么时候一种方法比另一种更可取是很有用的,这样我们就可以消除猜测和试图弄清楚某物是属性还是属性的尝试。

因此,我问,哪些属性/属性最好使用.prop(),哪些.attr()

4

2 回答 2

8

适用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()方法(尽管 using.attr(“value”, “somevalue”)会起作用。

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

参考

于 2013-05-20T17:00:11.863 回答
0

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

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

关于布尔属性,考虑由 HTML 标记定义的 DOM 元素,并假设它位于名为 elem 的 JavaScript 变量中:

elem.checked true (Boolean) 将随复选框状态变化 $(elem).prop("checked") true (Boolean) 将随复选框状态变化

elem.getAttribute("checked") "checked" (String) 复选框的初始状态;不改变 $(elem).attr("checked") (1.6) "checked" (String) 复选框的初始状态;不变

$(elem).attr("checked") (1.6.1+) "checked" (String) 将随着复选框状态而改变 $(elem).attr("checked") (pre-1.6) true (Boolean) 改变为复选框状态

资源

于 2013-05-20T17:08:18.173 回答