为什么不推荐使用jQuery 1.9+ attr()方法?

作为一名jQuery1.9 +软件开发人员,我是否可以在日常工作中“反对”使用attr()方法?


正如许多问题所显示的,

  • .prop()vs .attr()(main)
  • jQuery attr与道具,有道具列表?
  • jQuery attr vs道具?
  • 将jQuery 1.8.3迁移到1.9.0 - 替换弃用的.attr()
  • ...等...
  • 关于“使用attr或者使用prop?”有很多困惑,并且从我的(开发者)的观点来看,对于attr()方法的所有用法,我们可以使用prop来代替:

  • 向后兼容性:编写新的软件不需要这个;
  • 性能:John说:“通过.attr()方法访问属性将比通过.prop()直接访问它们要慢一些。
  • 更改属性值:所有可以通过prop(name,newvalue)方法更改。
  • 删除属性:所有可以通过removeProp(name)方法删除。
  • 检查HTML属性值:浏览器使用DOM,所有HTML都转换为DOM,并且,如果DOM影响attr(name)方法也会受到影响。 关于prop的“强类型”:比“html string value”更好(例如“checked”vs true)。
  • 检查“HTML原始代码”中是否定义了一个属性(假设浏览器中的attr方法返回未定义的attr ),那么我们需要在某个软件中使用这个attr ? 在表单中,“.val()方法是推荐的jQuery方法来获取或设置表单的值”
  • 跨浏览器一致性:两者(不仅是attr)是一致的方法。 (它是??)。
  • 所以,在这个时候(2013年),在开发新的jQuery代码时我没有看到使用attr方法的好理由......换句话说, 这是一个问题: 有一个很好的理由使用attr方法在我的日常工作中?


    .attr()不会被弃用,因为它对于它的作用是有用的,并且是唯一正确的方法来做它的作用(使用每个元素的getAttribute函数,它做同样的事情或者自己解析HTML )。 我们甚至进行这个讨论的唯一原因是因为jQuery(和一些旧的浏览器(咳嗽IE咳嗽))错误地将属性和属性混淆在一起,而混淆是他们在1.9中显然修复的。

    .attr()检索属性,而.prop()检索属性。 这两者是不同的东西,并且一直都是正式的(尽管DOM通常具有与属性相对应的属性)。 如果你有一个<p whatever="value"> ,那么whatever不是浏览器识别的属性,你都会使用.attr()来获取属性的值。 .prop()甚至无法在大多数浏览器中看到它。

    当您关心生成的DOM属性时,请使用.prop() 。 当您关心实际的HTML属性时,请使用.attr() 。 这不是一个真正的任何一件事或一件事; 你可以在相同的代码中使用两者,并且Universe不会内爆一次(假设你已经正确使用了它们)。 :)只要使用适合你当时工作的工具,就不要试图“折旧”那些没有损坏的东西。


    我冒昧地为你准备了一把小提琴:

    http://jsfiddle.net/5REVP/

    尤其是这部分:

    <div id="example" style="padding:10px"></div>
    
    console.log("style");
    var styleAttr = $("#example").attr("style");
    console.log(styleAttr); // You get "padding:10px"
    var styleProp = $("#example").prop("style");
    console.log(styleProp); // You get a CSSStyleDeclaration object
    

    “样式”示例清楚地显示属性与属性不同(检查控制台)。

    为了可读性,可维护性和向后(以及向前)兼容性,您应该总是对给定任务使用正确的方法,否则方法可能会停止像您一样行为,尽管如此,.attr()方法是那个例子。

    .attr()方法用于获取元素的属性,属性是SGML术语,指的是元素标签中包含的信息,您可以通过检查元素轻松读取该信息。

  • 如果你得到一个元素的“样式”属性,你将不会得到任何信息,除了在该属性中专门编写的内容。
  • 如果您获得复选框的“已选中”属性,您将获得“已选中”或“”。
  • .prop()方法用于获取元素的DOM属性。

  • 如果你得到“样式”属性,你没有得到设计师在style属性中写的东西,你会得到元素的所有实际CSS属性。
  • 如果您获得复选框的“已选中”属性,您将得到真或假。

  • .attr()仅访问HTML属性,而.prop()将检索不在HTML元素上的属性。 请参阅文档:

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

    http://api.jquery.com/prop/

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

    上一篇: Why jQuery 1.9+ attr() method not deprecated?

    下一篇: Prevent RequireJS from Caching Required Scripts