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

这个问题在这里已经有了答案:

  • .prop()vs .attr()17答案

  • 适用于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”)将起作用。

    简介: .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”(String)复选框的初始状态; 不改变$(elem).attr(“checked”)(1.6)“checked”(String)复选框的初始状态; 不会改变

    $(elem).attr(“checked”)(1.6.1+)“checked”(String)将复选框状态变化$(elem).attr(“checked”)(pre-1.6)true(Boolean)复选框状态

    资源

    链接地址: http://www.djcxy.com/p/27539.html

    上一篇: When is it preferable to use `attr()` instead of `.prop()`?

    下一篇: jQuery 1.6 prop() on div's title