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

注意 :虽然可能很容易说这是.prop()vs .attr()的重复, 但我不相信它。 .prop()文章解释了.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 (ie, window.location) | | ✓ | | multiple | | ✓ | | readOnly | | ✓ | | rel | ✓ | | | selected | | ✓ | | src | ✓ | | | tabindex | ✓ | | | title | ✓ | | | type | ✓ | | | width (if needed over .width()) | ✓ | | +------------------------------------+------------+-----------+ 

不应使用.attr().prop()来获取/设置值。 使用.val()方法(尽管使用.attr(“value”, “somevalue”)将起作用。

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

参考

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

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

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

elem.checked true(布尔值)将随复选框状态改变$(elem).prop(“checked”)true(布尔值)将随复选框状态而改变

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

$(elem).attr(“checked”)(1.6.1+)“checked”(字符串)将随复选框状态改变$(elem).attr(“checked”)(pre-1.6)true(布尔值)更改为复选框状态

资源