什么时候最好使用`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(布尔值)更改为复选框状态
资源