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,为了提供更好的答案,我将寻找更多参考资料。任何帮助都将不胜感激。(我认为这支持了我的观点,即这方面存在足够多的不确定性,因此在容易找到的地方清楚地说明答案是有用的。)